是否可以在使用 OR 运算符时在 solr 中进行邻近查询,例如:
term1:"三星" term2:"galaxy note" OR "galaxy 3" OR ...
我需要找出我是否同时拥有 ~n 邻近度的 term1 和 term2。
这里的简单方法是只生成一组更长的短语查询,而不是分别查找“Samsung”和“galaxy note”,而是将它们连接在一起,为您提供更像:
"Samsung galaxy note" OR "Samsung galaxy 3" ...
并将其设置为具有所需的倾斜量。
您也可以使用处理类似情况的ComplexPhraseQueryParser ,但我不确定它是否处理短语中的备用短语。 SurroundQueryParser也支持这种事情,但不做任何分析,这意味着您必须事先分析您的子查询(请参阅文档中的限制部分)。
如果要手动生成查询,可以使用一组SpanQuery
s 更直接地支持这一点,如下所示:
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);
目前最新版本的 Solr 4.4 默认不支持此功能。
SOLR-1604有一些相关信息。