我正在尝试将预测性“最佳匹配”名称搜索功能添加到已构建的自定义CRM中,但遇到了一些问题。我决定接受Sphinx的想法,认为它可以立即完成我想做的事情,但是我遇到了一些问题。我了解狮身人面像使用的匹配模式,但是我不确定如何获取类似的信息,例如:
如果我查询:Mike Shinoda
它应该能够拉出像这样的比赛,并按最佳比赛排名:Mike Shinoda | Shinoda, Mike | Mike Shinoji | Michael Shinoda | Shinoda, Michael | Mike James Shinoda | Mike and Ike Shinoda | Shinoda, Miles
做这样的事情的最好方法是什么?我还没有嫁给Sphinx,我只是找不到任何看起来可以做得更好的东西
我确实已经尝试过在此堆栈问题Sphinx and "did you mean ... ?" suggestions idea. WIll it work?中实现建议,但是它并不能很好地工作,因为匹配模式SPH_MATCH_ANY
匹配了太多的记录,并且SPH_MATCH_ALL
会在查询是'andrus Cheryl'
(因为'sheryl curry'
中的所有字母都在sheryl curry
中
编辑
我只索引一个字段:contact_name
最佳答案
首先狮身人面像不会知道迈克=迈克尔。您必须明确地告诉它这种“等效性”-特别是具有wordforms
功能:)
>因为雪莉咖喱中的所有字母都在'andrus Cheryl'中
狮身人面像不会那样做。狮身人面像匹配整个单词。它不执行“重排字母”匹配。
除非您已经明确实现了这一点(也许您从中得到的意思就是建议)-在这种情况下,这并不是您真正想要的。
建议返回普通的普通狮身人面像索引(无三元组),然后运行类似的查询
"^Mike Shinoda$" | "Mike Shinoda" | "^Mike Shinoda" | "Mike Shinoda$" | (^Mike Shinoda) | (Mike Shinoda$) | (Mike Shinoda) | (Mike Shinoda)
使用
SPH_MATCH_EXTENDED
和SPH_RANKING_WORDCOUNT
与
wordforms
一起照顾Michael> Mike的对等问题。关于php - “最佳匹配”人名搜索/使用Sphinx搜索进行排名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18887154/