在Solr中使用短语进行邻近搜索

13

我经常使用Solr的相似搜索来搜索一定范围内的单词,比如:

"Government Spending" ~2

我想知道是否有一种方法可以使用短语和一个单词或两个短语进行近似搜索。这可行吗?如果可以,那么语法是什么?

3个回答

16

这似乎是“有点”可行的。考虑一下这段文本:

This is more about traffic between Solr servers themselves 

"more traffic between solr" ~2

"more about between solr" ~2

即使您更改顺序,它也可以工作:

"more about solr between" ~2" ~2

但是如果距离太远,则无法正常工作:

"more about servers themselves" ~2

我认为,如果这样不起作用,可能很容易制作一个自定义请求处理程序来实现此目的。我想您可能需要定义一种新的语法,例如("phrase one" "phrase two") ~2。我猜测,如果您正在进行分词,并创建了一个Lucene查询,其中有一个仅为“phrase one”的标记和另一个为“phrase two”的标记,两者之间具有某种接近度,那么它将起作用。(当然,您需要实际进行Lucene Java调用,不能仅仅将查询交给它(阅读此内容:http://lucene.apache.org/java/2_2_0/api/index.html)。)


11

开箱即用,我已经发现了一种使用多个词或短语执行Solr接近搜索的方法,请参见下面:

例如,使用3个单词:

"(word1) (word2) (word3)"~10

例如,使用2个短语:(请注意,双引号需要转义)

"(\"phrase1\") (\"phrase2\")"~10


1
这对我来说没有限制短语的结果(在Solr 9.0.0中)。例如,使用"(\"cord power\") (\"dock\")"~10搜索示例“techproducts”数据,即使术语“cord power”未出现在文档中,也会返回一个命中,而“power cord”确实出现。 - user9712582

9
自Solr 4以来,使用SurroundQueryParser可以实现此功能。
例如,要查询“短语一”后不超过3个单词跟着“短语二”的情况:
3W(phrase W one, phrase W two)

要查询“短语一”附近5个单词的“短语二”:
5N(phrase W one, phrase W two)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接