Solr保留关键字查询顺序

时间:2014-06-12 17:36:54

标签: solr lucene

我想查询以保留关键字顺序。

例如:

SCART 1 - 我想匹配位置3,4。现在Solr匹配位置2,3,4。

如何编写查询以满足这些要求?我还想指定斜坡距离。如果这是不可能的,我愿意接受其他建议。

索引

position |   1  2   3   4  5   6    7    8   9  
token    | HDMI 1 SCART 1 TV tuner yes DLNA yes  

更新

我会详细解释我想要的东西。我想使用Solr进行产品属性提取。我将抓取网上商店并将整个产品页面放入Solr。在字段上我使用一些过滤器来删除不必要的令牌(HTML,停用词)。

到目前为止我尝试了什么:

SCART 1 - 不行,它只是在文档中随机匹配

"SCART 1" - 不行,因为上面的例子正在运作,但有些页面写的不同 - 例如。 SCART input 1

"SCART 1"~5 - 最好的,它匹配“ SCART 输入 1 ”,但如果整个索引看起来像HDMI input 1 SCART input 1则匹配以下令牌“ HDMI输入 1 SCART 输入 1

我想要的是什么:

所以我想保留关键字顺序,即使我指定了slop。如果我查询"SCART 1"~5我希望在1匹配后SCART匹配,就像这样“HDMI输入1 SCART 输入 1 ” 。

我不知道是否可以通过Solr实现这一目标,正如我所说,我愿意接受替代方案。

1 个答案:

答案 0 :(得分:1)

标准查询解析器不具备支持此功能所需的灵活性。我不相信edismax处理这个问题。因此,您需要使用SpanQueries自己构建查询:

SpanQuery[] clauses = new SpanQuery[2];
clauses[0] = new SpanTermQuery(new Term("field", "scart"));
clauses[1] = new SpanTermQuery(new Term("field", "1"));
Query query = new SpanNearQuery(clauses, 5, true);

如果您愿意,也可以使用其他查询解析器。 SurroundQueryParser处理这些类型的跨度,如:

5N(SCART, 1)