在Solr中,您可以使用语法
执行有序的邻近搜索"word1 word2"~10
按顺序排列,我的意思是word1将始终位于文档中的word2之前。我想知道是否有一种简单的方法来执行无序的邻近搜索,即。 word1和word2出现在彼此的10个单词之间,首先出现的并不重要。
这样做的一种方法是:
"word1 word2"~10 OR "word2 word1"~10
上述方法可行,但如果可能,我正在寻找更简单的方法。
答案 0 :(得分:7)
Slop表示可以发生多少个单词转置。所以“a b”将与“b a”不同,因为允许不同数量的转置。
a foo b
有位置(a,1),(foo,2),(b,3)。要匹配(a,1),(b,2)将需要一个改变:(b,2)=> (B,3)一般情况下,如果"a b"~n
与某些内容匹配,那么"b a"~(n+2)
也会匹配。
我认为#2可能更好,除非你的slop非常大。
答案 1 :(得分:2)
你确定它已经不能那样了吗?文档中没有任何内容表明它是“有序的”:
可以使用草率短语查询来完成邻近搜索。文档中出现的两个术语越接近,得分就越高。一个草率的短语查询指定一个最大的“slop”,或者需要移动一个令牌的位置数来获得匹配。
标准请求处理程序的这个示例将找到“batman”出现在“movie”的100个单词中的所有文档:
答案 2 :(得分:1)
从Solr 4开始,可以SurroundQueryParser。
E.g。做有序搜索(查询“短语二”跟在“短语一”后不超过3个单词):
3W(phrase W one, phrase W two)
进行无序搜索(在“短语一”的5个单词附近查询“短语二”):
5N(phrase W one, phrase W two)