使用OR运算符时进行solr proximity搜索

时间:2013-09-16 14:02:42

标签: solr lucene

是否可以在使用OR运算符时在solr中进行邻近查询,例如:

TERM1: “三星” term2:“galaxy note”或“galaxy 3”或......

我需要找到我是否同时接近term1和term2。

2 个答案:

答案 0 :(得分:0)

Solr 4.4默认不支持此版本,目前是最新版本。

SOLR-1604有一些相关信息。

答案 1 :(得分:0)

这里简单的方法是生成一组较长的短语查询,而不是单独查找“三星”和“星系音符”,将它们连接在一起,为您提供更多类似的内容:

"Samsung galaxy note" OR "Samsung galaxy 3" ...

并将其设置为具有所需的污垢量。

您也可以使用ComplexPhraseQueryParser处理类似案例,但我不确定它是否会处理短语中的替代短语。 SurroundQueryParser也支持此类事情,但不进行任何分析,这意味着您必须事先分析子查询(请参阅文档中的“限制”部分)。

如果您想手动生成查询,可以使用一组SpanQuery更直接地支持此查询,这看起来像:

Query rootQuery = parser.parse("\"Samsung\"");
Query option1Query = parser.parse("\"galaxy note\"");
Query option2Query = parser.parse("\"galaxy 3\"");
Query option3Query = parser.parse("\"something else\"");
SpanQuery orQuery = new SpanOrQuery(
    new SpanMultiTermQueryWrapper(option1Query), 
    new SpanMultiTermQueryWrapper(option2Query), 
    new SpanMultiTermQueryWrapper(option3Query)
);
SpanQuery finalQuery = new SpanNearQuery({new SpanMultiTermQueryWrapper(rootQuery), orQuery}, slop, true);
相关问题