私には次の要件があります:-
私は多くの(たとえば100万)値(名前)を持っています。ユーザーは検索文字列を入力します。
ユーザーが名前を正しくつづることは期待していません。
だから、私は一種のグーグルを「あなたは意味しましたか」にしたいです。これにより、データストアからのすべての可能な値が一覧表示されます。ここに似ているが同じではない質問があります。これは私の質問に答えませんでした。
私の質問:-1)これらのデータをRDBMSに保存することはお勧めできません。その場合、SQLクエリにフィルターを適用しません。そして、私は全表スキャンをしなければなりません。では、この状況では、データをどのように保存する必要がありますか?
2)2番目の質問はこれと同じです。しかし、私の質問を完全にするために、大規模なデータセットを検索するにはどうすればよいですか?データセットにFrankyという名前があるとします。ユーザーがPhrankyと入力した場合、Frankyと一致させるにはどうすればよいですか?すべての名前をループする必要がありますか?
レーベンシュタイン距離に出くわしました。これは、可能な文字列を見つけるための優れた手法になります。しかし、繰り返しになりますが、私の質問は、データストアからの100万個すべての値を操作する必要があるかどうかです。
3)私は知っています、Googleはユーザーの行動を監視することによってそれを行います。しかし、私はユーザーの行動を見ずにそれをやりたいと思っています。つまり、距離アルゴリズムを使用して、まだわかりません。前者の方法では、最初に大量の検索が必要になるためです。
4)カークブロードハーストが以下の回答で指摘したように、2つの可能なシナリオがあります:-
- 単語のタイプミス(距離編集アルゴリズム)
- 単語を知らず、推測しているユーザー(音声一致アルゴリズム)
私はこれらの両方に興味があります。それらは実際には2つの別個のものです。たとえば、SeanとShawnは同じように聞こえますが、編集距離は3です。タイプミスと見なすには高すぎます。