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 という 1 つのフィールドだけにインデックスを付けています。

4

1 に答える 1

1

まず、スフィンクスはマイク = マイケルであることを知りません。そのような「同等性」を明示的に伝える必要があります-wordforms特にそのための機能があります:)

> シェリルカレーの文字は全部「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

wordformsMichael > Mike の同等性を処理します。

于 2013-09-19T11:19:55.237 に答える