我正在尝试为我构建的自定义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
答案 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_EXTENDED
和SPH_RANKING_WORDCOUNT
与wordforms
照顾迈克尔>迈克等同。