関連するコンテンツを検索したい大量のドキュメント、テキスト ファイルがあります。以下の要件で説明するように、優れたメソッドを実装した検索ツールを見たことがありますが、どこにあるか思い出せません。
私の要件は次のとおりです。
- 最適化された検索機能が必要です: この検索機能に、スペースで区切られた部分的に完全な (または完全な) 単語のリスト (1 つ以上) を提供します。
- この関数は、最初の単語で始まる単語またはそれに等しい単語を含むすべてのドキュメントを検索し、2 番目の単語を使用してこれらの検索されたドキュメントを検索し、最後にリンクされている実際の単語を含むリストを返します。それらを含むドキュメント (名前と場所) とともに、単語の完全なリストを取得します。
- ドキュメントには、リスト内のすべての単語が含まれている必要があります。
- この関数を使用して、入力時に検索を実行し、結果をツリーのような構造でリアルタイムに表示および更新できるようにしたいと考えています。
私が思いついたソリューションへの可能なアプローチは次のとおりです。「Documents」、「Words」、および「Word_Docs」という 3 つのテーブルを持つデータベースを作成します (ほとんどの場合、mysql を使用します)。
- 「ドキュメント」には、すべてのドキュメントの (idDoc、名前、場所) があります。
- 'Words' は (idWord, Word) を持ち、すべてのドキュメントからの一意の単語のリストになります (特定の単語は 1 回だけ表示されます)。
- 'Word_Docs' は (idWord, idDoc) を持ち、それが出現する各単語とドキュメントの一意の ID の組み合わせのリストになります。
この関数は、各キーストローク (スペースを除く) の編集ボックスの内容で呼び出されます。
- 文字列はトークン化されています
- (ここで私の車輪は少し回転します): 単一の SQL ステートメントを作成して、必要なデータセットを返すことができると確信しています: (actual_words, doc_name, doc_location); (私は SQL のホット ナンバーではありません)、代わりに、各トークンの一連の呼び出しと、繰り返されない idDocs の解析ですか?
- このデータセット (/list/array) が返されます
返されたリスト コンテンツが表示されます。
例: 「seq sta cod」で呼び出すと、次のように表示されます。
sequence - start - code - Counting Sequences [file://docs/sample/con_seq.txt]
- stop - code - Counting Sequences [file://docs/sample/con_seq.txt]
sequential - statement - code - SQL intro [file://somewhere/sql_intro.doc]
(等々)
これは最適な方法ですか?関数は高速である必要がありますか、それともスペースがヒットした場合にのみ呼び出す必要がありますか? 単語補完を提供する必要がありますか? (データベース内の単語を取得しました)少なくとも、これにより、存在しない単語に対する関数の無駄な呼び出しが防止されます。単語補完の場合: どのように実装されますか?
(たぶん、SO はタグをブラウジングするためにこのタイプの検索ソリューションを使用することもできますか? (メインページの右上にあります))