非リテラル比較に基づく高速な検索方法
私はかなり大きなデータセット、基本的にすべての文字列に対する小さな検索を開発しています。比較はリテラルであってはなりませんが、テーブル フィールド間の関係は十分に単純です。つまり、「filippo」、「philippo」、「filipo」などを関連付けることができる必要があります。
レビンスタイン距離 ( this、here、here ) に頻繁に出くわしますが、それが私の特定のケースで実用的かどうかはわかりません。
簡単に言うと、2 つのテーブルがあります。「検索キー」を含む小さなテーブルと、検索を実行する大規模なテーブルです。両方のテーブルには同じフィールドがあり、どちらも同じ「意味」を持っています。例えば
KEYS_TABLE
# | NAME | MIDNAME | SURNAME | ADDRESS | PHONE
1 | John | Fake | Doe | Sesame St. | 333-12-32
2 | Ralph | Stue | Michel | Bart. Ghost St. | 778-13000
...
と
SEARCH_TABLE
# | NAME | MIDNAME | SURNAME | ADDRESS | PHONE
...
532 | Jhon | F. | Doe | Sesame Street | 3331232
...
999 | Richard | Dalas | Doe | Sesame St. | 333-12-32
私がやりたいのは、ある種のメトリックを取得するか、特定のレコードごとにランク付けし、特定の関連性を超えるKEYS_TABLE
すべてのレコードをレポートするSEARCH_TABLE
ことです (メトリックまたは単に「KNN」のような方法で定義されます)。
KEYS_TABLE
xのすべての行のすべてのフィールドを計算する必要があるため、レビンスタイン距離は実用的ではないかもしれませんSEARCH_TABLE
。SEARCH_TABLE
約 4 億件のレコードがありKEYS_TABLE
、100k から 1mil まで変化することを考えると、結果の数値は大きすぎます。
以前に両方のテーブルを充実させる方法、または検索を実行するためのより簡単な (安価な) 方法があることを望んでいました。
データを自由に変換することが許可されていることに言及する価値があります。たとえば、 、 に正規化しSt.
、st
特殊文字などを削除します。Street
st
私の選択肢は何ですか?