如何在Solr 4.0中结合前缀和模糊搜索

时间:2014-01-21 12:44:21

标签: solr lucene prefix solr4 fuzzy-search

模糊搜索的solr语法是:

q~n其中q是查询词,n是Levenshtein距离(例如1-3)。

前缀搜索的语法是:

q *其中q是查询词,*表示通配符。

将q~n * (偶数n = 1)这两者结合起来有副作用,几乎所有东西都匹配 (有一个原因,我还是要找出来。)

将q * ~n (偶数n = 1)这两者结合起来会产生副作用,即查询执行,因为它只是一个前缀搜索。

在我们的用例中,我们需要根据存储在索引中的历史查询提供建议。当你输入一个拼写错误的术语时,这个接缝也是google所做的事情,这对于建议来说是一个很好的解决方案。 问题是,我们可以提供以相同索引开始的建议,或者提供具有定义的Levenshtein距离<= 3的建议,这对于长期来说是不切实际的。

现在,我知道3年前有一个类似question的问题,解决方案说它不能用solr语法表达,整个案例没有任何特别的意义,但在我看来有意义,并且组合将成为实际问题的完美解决方案。

2 个答案:

答案 0 :(得分:1)

不是经过测试的解决方案,您是否考虑过使用此解决方案? q* OR q~1例如name:S* OR name: S~1

更大的示例:name:Samson~3 OR name:Samson*返回:<str name="name">Samsung SpinPoint P120 SP2514N - hard drive - 250 GB - ATA-133</str></doc>

答案 1 :(得分:0)

我没有特别尝试过,但看起来你可以用ComplexPhraseQueryParser做你想做的事。

看起来ComplexPhraseQueryParser预计将与4.8一起发布,但是现在你可以从Solr的Jira获得插件(zip文件中有安装说明)。 https://issues.apache.org/jira/browse/SOLR-1604

这里有一些使用距离的讨论。 http://lucene.472066.n3.nabble.com/ComplexPhraseQueryParser-and-wildcards-td2742244.html

我希望通过ComplexPhraseQueryParser,您可以执行"q*"~n之类的查询。