0

私はプロジェクトを構築しており、部分的なテキスト一致に基づく結果をオートコンプリート フィードに提供する超高速の方法が必要です。

データベースの 1 つのフィールドのみをインデックス作成/検索しますが、データベース行には追加のデータが含まれますが、これらのフィールドにはインデックスを作成しません。私は約を持っています。25k 行。

要件:

  • フィールド内のどこにでも一致する必要があります (Lorem Ipsum Dolor Sit Amet は、「Lor」、「Ipsum」、「olor」、「Sit Amet」と入力し始めると見つかります)
  • 結果を JSON フィードで非常に迅速に返す必要があります (ただし、データの元のソースはそれほど重要ではありません)。
  • 高トラフィック向けのスケーラブルなソリューション

いくつかのオプションを検討しました...

  • mongoDB でのクエリのような MongoDB の使用
  • エラスティックサーチ - 私がしなければならないことに対して少しやり過ぎかどうかわからない、そして上記のように部分的なテキストに一致する例を見たことがない
  • SQL LIKE クエリですが、これが十分に高速ではないことを想像してみてください。

プログラミング言語はそれほど問題ではありませんが、Python または PHP が望ましいでしょう。

4

2 に答える 2

1

他の人が述べたように、言語分析および構文分析 (トークン化、ステミング、大文字小文字およびアクセントの正規化など) を実行するフルテキスト インデックスを使用すると、最良の結果が得られます。ただし、これは、ある程度のセットアップと構成がなければ実現しません。

Solr の Suggester コンポーネントをチェックしてください: http://wiki.apache.org/solr/Suggester 。新しいコンポーネントがあります。AnalyzingSuggester などと呼ばれるもので、Lucene でのみ使用できると思います。それを使用できるインメモリソリューション(Javaのみ)。

于 2013-01-25T13:00:21.903 に答える
1

これは、典型的な全文検索のように思えます。アプリケーションとデータが含まれるデータベースによっては、インプロセスのシューッという音で必要なことが行われる場合があります (Java の Lucene など)。

LIKE実際のフルテキスト インデックスと比較して、SQL クエリのパフォーマンスが大幅に低下すると言っても過言ではありません。MongoDBもあまり適していないかもしれませんが、おおまかにあなたが提案したことを行うように調整できます.

于 2013-01-25T12:55:35.933 に答える