私は、長さが 2 ~ 7 語の範囲の ~ 15,000 の複数語句のデータベースを持っています。小さな文書 (~1000 語) を検索して、含まれている語句を確認できるようにしたいと考えています。私は基本的にこれを達成するための最良の方法を探しています。
現在、MySQL のデータを 2 つのテーブルに持っています。
フレーズ (~15,000 行)
phrase_id
フレーズ
の
長さ (フレーズ内の単語数)
ドキュメント (100 秒/日)
document_id
テキスト
フレーズ リストは同じままで、新しいドキュメントが常に追加されています。
私が知る限り、これを行う最善の方法は、ある種のインデックスを使用することです。理想的には、ドキュメントが追加されたときにインデックスを作成して、含まれているフレーズを確認し、後で検索を行ったときに結果がすぐに返されるようにします。
MySQLでこれを行う方法を検討しました
- ドキュメントを 2 つの単語フレーズにトークン化し、トークンで始まるフレーズを見つけます
- トークンの長さを増やして結果を反復処理します - if (phrase length == token length) {match} else {keep for next token length}.
- 結果を新しいテーブルdocument_phrases phrase_id, document_id に保存します
これはすべて多くのオーバーヘッドのように思えますが、Sphinx のような外部ツールがこれをより効率的に実行できるかどうか疑問に思っています。調べてみたのですが、1 つの文書で多くの語句を検索するのではなく、多くの文書で 1 つの語句を検索するのが主なようです。
私が完全に見逃したテクニックはありますか?技術的には興味深いものの、Java/Python を使用したソリューションは、このプロジェクトで学習する予定の範囲を超えていることに注意してください。