私はこれについて考え、たとえばユーザーがスペルミスを入力した場合など、データベースをファジー検索する方法に関する解決策を考え出そうとしています。この背後にあるロジックに大きな問題はありますか?それは機能し、以前に行われましたか?
検索するテーブル:
**tblArticles**
Body - Soundex_Body - CharacterCoded_Body
したがって、物理的な表示のために生のテキスト本文を保存します。他の2列は、次の方法で事前計算される検索に使用されます。
Soundex
本文は言葉に分割され、soundexバージョンに変換されます。IE、結果の本文は次のようになります。
H252 B54 C23 E33... etc
したがって、誰かが「恐竜」と入力すると、記事本文には「恐竜」と表示され、これらは両方ともB26と評価されます。次に、検索語のsoundex値に対してLIKEを実行します。
文字コード
IEで文字を素数にマップする文字マッピングを考えると:
h = 2
e = 3
l = 5
o = 7
p = 11
c = 13
help = 2*3*5*11 = 330
hello = 2*3*5*5*7 = 1050
hell = 2*3*5*5 = 150
hlep = 2*5*3*11 = 330
cello = 13*3*5*5*7 = 6825
ユーザーが「hello」と入力するつもりだったが、たとえば「hlelo」のように2つ以上の文字を切り替えた場合、同じ数字に評価されます。生の本文を単語に分割し、すべての単語を素数でエンコードしてデータベースに保存すると、次のようなフィールドが得られます。
330 6825 330 1050... etc
次に、この値を検索して、ミスタイプと一致させることができます。
利点
- 誤字防止
- 音声の間違ったつづりに対する保護
- 英語を母国語としない人に優しい
- すべての言語で動作します(soundexが動作する場所)
コメントと考え?多層検索の一種。もちろん、戻り値に重みを付けてさらに改善することもできます(つまり、テキスト本文の文字どおりの一致はもっと価値があります)が、これはスペルミスや英語を母国語としない人が検索を行う場合に適したソリューションですか?