模糊搜索的solr语法是:
q~n其中q是查询词,n是Levenshtein距离(例如1-3)。
前缀搜索的语法是:
q *其中q是查询词,*表示通配符。
将q~n * (偶数n = 1)这两者结合起来有副作用,几乎所有东西都匹配 (有一个原因,我还是要找出来。)
将q * ~n (偶数n = 1)这两者结合起来会产生副作用,即查询执行,因为它只是一个前缀搜索。
在我们的用例中,我们需要根据存储在索引中的历史查询提供建议。当你输入一个拼写错误的术语时,这个接缝也是google所做的事情,这对于建议来说是一个很好的解决方案。 问题是,我们可以提供以相同索引开始的建议,或者提供具有定义的Levenshtein距离<= 3的建议,这对于长期来说是不切实际的。
现在,我知道3年前有一个类似question的问题,解决方案说它不能用solr语法表达,整个案例没有任何特别的意义,但在我看来有意义,并且组合将成为实际问题的完美解决方案。
答案 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
之类的查询。