模糊搜索的solr语法是:
q〜n其中q是查询项,n是levenshtein距离(例如1-3)。
前缀搜索的语法是:
q *其中q是查询术语, * *表示通配符。
将两者都结合起来,例如q〜n*(甚至n = 1)具有副作用,几乎所有内容都与(由于某种原因,我仍然需要找出答案)。
将两者都结合在一起,例如q*〜n (均为n = 1)具有副作用,查询执行,因为它将仅是前缀搜索。
在我们的用例中,我们需要根据存储在索引中的历史查询提供建议。当您输入拼写错误的术语时,该接缝也是Google所做的事情,这是建议的绝佳解决方案。问题是,我们可以从相同的索引开始提供建议,或者有一些具有定义的Levenshtein距离< = 3的建议,这是长期的不切实际。
现在,我知道3年前有一个类似的问题,该解决方案说可以在Solr语法中表达出来,整个情况没有任何特殊意义,但在我看来,这是有意义的和一个有意义的组合将是解决实际问题的完美解决方案。
不是经过测试的解决方案,您是否考虑过使用此问题?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>
我没有具体尝试过,但是看起来您可以使用复杂的phrasequerparser做您想做的事情。
看来,复杂的Phrasequerparser计划以4.8分发,但是现在您可以从Solr的Jira中获取插件(ZIP文件中的安装说明)。https://issues.apache.org/jira/browse/solr-1604
在这里有一些讨论。http://lucene.472066.n3.nabble.com/complexphrasequerparser-and-wildcards-td2742244.html
我期望您可以使用"q*"~n
等查询。