短い答えは、テキスト検索には、従来のデータベースの設計と使用方法とほとんど共通点がないためです。RDBMSの作成/使用のエースである誰かは、テキスト検索に初めて取り組むとき、虐殺の子羊のようです。
(長い答えて申し訳ありませんが、私は今日ベッドで病気で、他に何もすることができません。)
以下は、簡単にTLの下に来ることができました; DRが、あなたは時間と関心を持っている場合、以下は、ある作品長い答えの。注:私は1986年から商業情報検索システムを実装したことから話しています。技術的には成功しましたが、マーケティングは失敗に終わりました。
IR(Information Retrieval)を適切に行うには、まず何を検索し、どのようにクエリメカニズムを使用してそれを見つけるかを考えることから始める必要があります。これは簡単に聞こえるかもしれませんが、簡単ではありません。ここでは、ドキュメント(またはフィールド)のスキャンを開始する前に決定する必要があることの一部を示します。
- ケースは重要ですか?DoDはdodと同じですか?"flame"と "FLAME"(バーガーキングウッパーに基づくコロン(はい、本当に))はどうですか?
- どの種類のトークンをインデックスに登録しますか?あなたは明らかに「パパ」に索引を付けたいと思っています。おそらく「daddy123」に索引を付けたいと思います。「123」にインデックスを付けますか?「12.3」?「192.168.1.1」?
- ハイフネーションのようなものをどのように扱いますか?やや古くなった例は、「データベース」、「データベース」、「データベース」で、1986年にすべて同時に使用されました。
- クエリ言語が「Bと同じ文でAを見つける」の概念をサポートしている場合、文の区切りをどのように決定しますか?「?」そして「!」十分に簡単です。それらの「。」は雌犬です。「Mr。」、「2。」、「etc。」などについて考えます。
- ステミングをサポートしますか?その場合、誤ってPOS(品詞)を変更しないように注意してください。たとえば、「cats」は「cat」にステミングできますが、「blinds」は「blind」にステミングすることもしないこともあります。動詞の場合(「彼は私を盲目にする」)はステムできますが、名詞の場合(「私はあなたのブラインドが好きです)はできません(または少なくともそうすべきではありません)。ステミングは非常に魅力的ですが、ファーストオーダーの沼です。
- どの言語をサポートしますか?奇妙なことに、ヘップバーンのローマ字表記では日本人にとって問題なく動作する傾向がありますが、英語で機能するものは、フランス語またはドイツ語のいずれかで大きな失敗をする可能性があります。
そしてリストはどんどん続きます。
次に、クエリ言語について考える必要があります。サポートするすべてが単純なブール値である場合は簡単であるように見えるかもしれませんが、ほとんどの人が同意していることの1つは、純粋なブール値がテキストを処理することです。たとえば、あなたが発注と近接し、少年を指定するために、追加の演算子が必要になります、ああ、少年はないことを、これまでのメイクの人生はもっと複雑。また、タイトル、ヘッダー、本文など、どのセクションにいるかを知る必要があります。これにより、コレクション固有のあらゆる種類の解析が楽しくなります。しかし、ドキュメントで発生するトークンのリストを用意するだけではもはや十分ではありません。ドキュメントで発生します。これにより、(docID、sectionID、para-in-section、sentence-in-para、word-in-sentence)のアドレスタプルが生成されます。この情報を効率的に保存および検索すると、おもちゃ以外のコレクションが危険にさらされる可能性があります。
次に、データストアの実際の構造があります。テキストシステムは通常、ドキュメントの「完全な反転」として実装されます。平均DBにはいくつのインデックスがありますか?10?50?500?IRでは、個別のトークンごとに1つ、5,000,000以上のインデックスを持つことは珍しくありません。また、特定のトークンには、1つのインスタンス(「narfle」や「garthok」など)または10,000,000のインスタンス(「the」など)を含めることができます。これは、インデックスを作成および更新するためのメソッド全体が高速である必要があるか、または沼に沈むことを意味します。また、従来のDBが行う他の問題の多くは、ディスクスペース管理、クラッシュリカバリ、実行中のシステムからの一貫したスナップショットなど、まだ残っています。
最後に結果のランキングがあります。大規模なコレクションに対するブールクエリからのランク付けされていない結果セットは、人間には役に立ちません。プログラムには役立つかもしれませんが、それは私が扱っていたものではありませんでした。私たちのシステムはブールを実装しましたが、私たちのセールスポイントは、コサイン係数に基づく類似性検索をサポートする最初の商業的に入手可能なシステムであることでした。このタイプの検索の数学と論理(基本的には、何百万ものドキュメントベクトルに対するクエリベクトルの正規化されたドット積)では、ブールとはまったく異なる方法でデータ表現と格納を行う必要がありました。
このすべて(およびそれ以上)が、「テキスト検索」と「データベース」がほとんど同じ文に属していない理由です。「通常の」ニーズに適したデータベースを選択し、外部IRシステムを使用して、プライマリDBの「ドキュメント」をインデックス付け/検索する方がよいでしょう。