21

100 万を超えるアイテム (潜在的にはそれ以上) を保持する文字列 (任意の長さ) のデータベースがあります。

ユーザーが指定した文字列をデータベース全体と比較し、存在する場合は同一の文字列を取得するか、最も近いあいまい一致 (60% 以上の類似性) を返す必要があります。検索時間は、理想的には 1 秒未満である必要があります。

私の考えは、長さに基づいてデータベースから候補を絞り込んだ後、各データベース文字列を検索文字列と比較するために編集距離を使用することです。

ただし、この操作を頻繁に実行する必要があるため、db 文字列のインデックスを構築してメモリに保持し、db を直接ではなくインデックスをクエリすることを考えています。

この問題に別の方法でアプローチする方法、またはメモリ内インデックスを構築する方法についてのアイデアはありますか?

4

7 に答える 7

5

この論文は、あなたが望むものを正確に説明しているようです。

Lucene ( http://lucene.apache.org/ ) もレーベンシュタイン編集距離を実装しています。

于 2008-11-21T18:21:50.067 に答える
2

データベースシステムについては言及していませんが、PostrgreSQLの場合は、次のcontribモジュールを使用できます。trgm-PostgreSQLのトリグラムマッチング

pg_trgm contribモジュールは、トリグラムマッチングに基づいてテキストの類似性を判断するための関数とインデックスクラスを提供します。

于 2008-11-21T18:59:11.300 に答える
2

データベースでサポートされている場合は、全文検索を使用する必要があります。それ以外の場合は、lucene などのインデクサーとそのさまざまな実装を使用できます。

于 2008-12-14T11:23:07.283 に答える
0

データ量が多いため、レコードを挿入するときに、音声アルゴリズムの値を計算してインデックス付きの列に格納し、選択クエリをその列の範囲内に制限 (WHERE 句) します。

于 2008-11-21T17:13:49.250 に答える
0

SOUNDEX ハッシュ (多くの SQL データベース エンジンに組み込まれている) を計算し、それによってインデックスを作成します。

SOUNDEX は単語の音に基づくハッシュであるため、同じ単語のスペル ミスは同じ SOUNDEX ハッシュを持つ可能性があります。

次に、検索文字列の SOUNDEX ハッシュを見つけて照合します。

于 2008-11-21T17:54:25.580 に答える
0

関連するアルゴリズムの非常に詳細な説明は、Dan GusfieldAlgorithms on Strings, Trees, and Sequences: Computer Science and Computational Biologyにあります。

于 2010-02-13T14:11:29.653 に答える
0

https://en.wikipedia.org/wiki/Levenshtein_distance

一部の DBMS ではレーベンシュタイン アルゴリズムが実装されています。

(例: PostgreSql: http://www.postgresql.org/docs/9.1/static/fuzzystrmatch.html )

于 2015-11-10T13:29:01.740 に答える