2014-02-17 227 views
1

我有以下情况:使用solr查询的部分词组匹配部分查询

对于查询“A B”,我们有完全匹配并且结果得分正确。但是当查询看起来像“A B C”时,结果是错误的,因为Solr在“A B”上看不到完全匹配。请帮助我以适当的方式配置Solr,让他在“A B”上找到“短语”匹配。

P.S.以下查询是否按预期工作:

A B field:C 
"A B" C 

回答

0

不知道如果我理解你的权利,但它听起来像是你需要生成shingles或许NGrams。简而言之,带状疱疹是通过对来自句子和边缘的单词进行分组而创建的。NGrams通过从单词的开头或结尾处获取字符来产生单词。

从Solr的维基:

  • n元语法:尼日利亚=> “に”, “NIG”, “的NiGe”, “曲霉”, “nigeri”, “尼日利亚”, “尼日利亚” ,“尼日利亚”
  • 带状疱疹:例如,一句“请划分这句话变成带状疱疹”可能被标记化成为带状疱疹“请分”,
    “分这个”,“这句话”,“句子翻译成” ,并“带入
    带状疱疹”。

既然你想在部分查询匹配,则需要包括相关的过滤器,查询分析器。

+0

请纠正我,如果我错了。但这将是一个很大的变化,因为Shringles不仅应该添加到查询时间,还应该添加到索引时间。而且,据我所知,这是在Solr/edismax中使用OOB的并行方法在短语作品上进行搜索... – Phantom

+0

这听起来对您而言,您只需拼凑查询并应用位置过滤器,以便“ABC”变为<“AB”或“BC”>。 看看这个问题,它似乎相似:http://stackoverflow.com/questions/4882481/how-to-match-against-subsets-of-a-search-string-in-solr-lucene – kaqqao