使用Sphinx搜索“最佳匹配”人名搜索/排名

时间:2013-09-19 06:00:07

标签: php mysql sphinx

我正在尝试为我构建的自定义CRM添加预测性“最佳匹配”名称搜索功能,但我遇到了一些问题。我决定和Sphinx一起认为它可以做我想要的开箱即用,但我遇到了一些问题。我理解sphinx使用的匹配模式,但我不确定如何获得这样的东西,例如:

如果我查询:Mike Shinoda

它应该能够提取这些匹配,按最佳匹配排名:Mike Shinoda | Shinoda, Mike | Mike Shinoji | Michael Shinoda | Shinoda, Michael | Mike James Shinoda | Mike and Ike Shinoda | Shinoda, Miles

做这样的事情最好的方法是什么?我没有和狮身人面像结婚,我找不到任何看起来会做得更好的事情

我之前已经尝试在此问题Sphinx and "did you mean ... ?" suggestions idea. WIll it work?中实施建议,但实际上效果不是很好,因为匹配模式SPH_MATCH_ANY匹配的记录太多,SPH_MATCH_ALL会在查询为'andrus Cheryl'时提取'sheryl curry'之类的记录(因为sheryl curry中的所有字母都位于'andrus Cheryl'

修改

我只索引一个字段:contact_name

1 个答案:

答案 0 :(得分:1)

首先,狮身人面像不会知道迈克=迈克尔。你必须明确告诉它'等价' - 特别是有wordforms特征:)

  

>因为sheryl咖喱里的所有字母都在'andrus Cheryl'中

狮身人面像不会这样做。狮身人面像匹配整个单词。它没有'重新安排的字母'匹配。

除非你已经明确地实现了(也许你的意思是建议) - 在这种情况下,它并不是你想要的。

建议回到普通的正常sphinx索引(没有三元组),然后运行像

这样的查询
"^Mike Shinoda$" | "Mike Shinoda" | "^Mike Shinoda" | "Mike Shinoda$" | (^Mike Shinoda) | (Mike Shinoda$) | (Mike Shinoda) | (Mike Shinoda)

使用SPH_MATCH_EXTENDEDSPH_RANKING_WORDCOUNT

wordforms照顾迈克尔>迈克等同。