1

複雑なテキスト検索エンジンを開発しようとしています。私は多くの本から何千ものテキストページを持っています。指定された複雑な論理基準を含むページを検索する必要があります。これらの基準には、実質的に次の任意の組み合わせを含めることができます。

A: 全文です。

B: 単語の語根 (語幹に似ています。つまり、特定のキー文字を持つすべての単語)。

C: Word テンプレート (一部の言語では、形容詞、過去/現在の動詞など、さまざまな品詞を形成するために特定のテンプレートに語根が埋められます...)。

D: 論理接続詞: AND/OR/XOR/NOT/IF/IFF および優先順位を示す括弧。

では、ページの全文をデータベース (インデックス化されていない) に保存し、SQL と正規表現を使用してそれらすべてを検索する方が高速でしょうか?

または、word/root/template-page-location タプルのインデックスを作成する方がよいでしょうか。したがって、個々の単語/語根/テンプレートの検索を強化できます。ただし、クエリに論理結合子を導入すると、扱いが難しくなります。そのような場合、次の手順を実行することを考えました。

1: 指定されたクエリで個々の単語/語根/テンプレートを個別に検索します。

2: 優先順位に基づいて、論理結合に応じて、(ステップ 1 からの) 2 つの結果リストを一度にマージします。

たとえば、「he AND (is OR was)」を検索する場合:

1: "he"、"is"、"was" を個別に検索し、各単語の結果リストを取得します。

2: マージ関数 OR-MERGE を使用して、「is」と「was」の結果リストをマージします。

3: マージ関数 AND-MERGE を使用して、OR-MERGE 関数からのマージ結果リストを "he" のリストとマージします。

手順 3 の結果は、指定されたクエリの結果として返されます。

教祖はどう思いますか?どちらが速いですか?より良いアイデアはありますか?

よろしくお願いします。

4

1 に答える 1

1

この種の問題に対する既製のソリューションはたくさんあります。独自に開発するのではなく、それらのいずれかを使用することを強くお勧めします。

使用しているデータベース ソリューションについては言及しません。Microsoft SQL Server の場合は、その全文検索機能を使用できます。MySQL の場合は、全文検索機能をご覧ください。Oracle、DB2、およびその他の主要な DBMS には、同様の機能があると確信しています。

または、Apache のLucene for JavaまたはLucene for .NET をご覧ください。これにより、DBMS を使用せずにドキュメントのインデックスを作成できます。

于 2010-05-15T09:32:38.670 に答える