狮身人面像和"你的意思是......?" 建议的想法.它有用吗?

sto*_*ker 5 mysql sphinx keyword levenshtein-distance search-suggestion

我正在尝试提出最快的搜索建议方法.起初我认为Levenstein UDF函数结合mysql表可以完成这项工作.但是使用levenshtein,mysql必须遍历表中的每一行(大量的单词),这会使查询真的变慢.

现在我最近安装并开始使用Sphinx(http://sphinxsearch.com/)进行全文搜索,主要是因为它的性能和与SphinxSE的紧密mysql集成.

所以我问自己是否可以使用sphinx以某种方式实现"你的意思"算法来提升性能,我想我发现了一个简单的算法.基本上我采取我想要纠正的所有关键字,在每个字母之间放一个空格,然后将它放在sphinx索引中.如果单词是'keyword',它就变成'keywor d'.现在,当用户输入一个单词时,我将其拆分为字母,并在sphinx索引中搜索与所提供的任何字母匹配的记录(我只需要一个).最好的部分是狮身人面像非常适合计算匹配行的相关性(权重),因此最佳匹配总是具有最大权重(我认为).它还会考虑单词(我的情况下的字母)位置,因此最佳匹配将按此顺序排列.

通过sphinx查询,我在关键字列表中得到了最相似的单词.然后我使用扩展的Levenshtain距离检查它,它考虑了重新排列的字母http://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance.如果字符串距离小于2(和!= 0),则建议单词.否则不建议任何事情.

我的想法有问题吗?我没想到的东西?任何预期的sphinx查询故障,以及与sphinx相关性计算的怪癖都没有给出最佳匹配?如果我在某处误会,请纠正我.

ser*_*ail 3

我看不出你的想法有什么问题。大胆试试吧。只是指出,只有当您想覆盖与 LD 非常相似的内置行为时,您的方法才相关。

例如,对于 sphinx 1.10-beta,您可以指定 min_infix_len 和 Expand_keywords 并使用 sphinx 的内置加权方法(BM25 和一些专有代码)以获得良好的结果。http://sphinxsearch.com/blog/2010/08/17/how-sphinx-relevance-ranking-works/

不要忘记对这些查询进行内存缓存,并创建一个预热脚本。