在 Solr 中,您可以使用语法执行有序的邻近搜索
"word1 word2"~10
通过有序,我的意思是 word1 在文档中总是排在 word2 之前。我想知道是否有一种简单的方法来执行无序的邻近搜索,即。word1 和 word2 出现在彼此相距 10 个单词之内,无论哪个先出现都没有关系。
一种方法是:
"word1 word2"~10 OR "word2 word1"~10
以上将起作用,但如果可能的话,我正在寻找更简单的东西。
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”,或者需要移动标记的位置数才能获得匹配。
这个标准请求处理程序的示例将查找在“电影”的 100 个单词内出现“蝙蝠侠”的所有文档:
从 Solr 4 开始,可以使用SurroundQueryParser。
例如进行有序搜索(查询“短语二”跟在“短语一”之后不超过 3 个单词):
3W(phrase W one, phrase W two)
要进行无序搜索(在“短语一”的 5 个单词附近查询“短语二”):
5N(phrase W one, phrase W two)