0

我正在尝试将预测性“最佳匹配”名称搜索功能添加到我构建的自定义 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 和“你的意思是......?”中实现这个建议。建议想法。它会起作用吗?,但它并没有真正工作得很好,因为匹配模式SPH_MATCH_ANY匹配的记录太多,并且会像查询时SPH_MATCH_ALL那样拉入记录(因为所有字母都在'andrus Cheryl''sheryl curry'sheryl curry'andrus Cheryl'

编辑

我只索引一个字段:contact_name

4

1 回答 1

1

首先狮身人面像不会知道迈克=迈克尔。您将不得不明确地告诉它这样的“等价物” - 有wordforms专门的功能:)

> 因为 sheryl curry 中的所有字母都在“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照顾迈克尔>迈克等价。

于 2013-09-19T11:19:55.237 回答