8

データベースのどこかにデータが保存されているとします。

Hello my name is Tom I like dinosaurs to talk about SQL.  
SQL is amazing. I really like SQL.

サイト検索を実装して、訪問者が用語を入力し、関連するレコードを返すことができるようにしたいと考えています。ユーザーは次のように検索する可能性があります。

Dinosaurs

そしてSQL:

WHERE articleBody LIKE '%Dinosaurs%'

正しいレコードのセットを返すことに問題なく対応します。

しかし、ユーザーが恐竜のスペルを間違えた場合、どのように対処すればよいでしょうか? いいえ:

Dinosores

(かわいそうな恐竜)。スペルの誤りを許容して検索するにはどうすればよいですか? 検索でよく見られるスペルミスを正しいスペルに関連付けて、元の用語 + 修正された用語で検索できますが、これを維持するには時間がかかります。

プログラム的に何か?

編集

SOUNDEXが役立つようですが、検索用語を入力するsoundexを使用した例を教えてください。

Dinosores wrocks

代わりにレコードを返します:

WHERE articleBody LIKE '%Dinosaurs%' OR articleBody LIKE '%Wrocks%'

分隊長を返すのはどれですか?

4

6 に答える 6

4

SQL Serverを使用している場合は、SOUNDEXをご覧ください。

あなたの例のために:

select SOUNDEX('Dinosaurs'), SOUNDEX('Dinosores')

同一の値を返します(D526)。

類似性のレベルを比較するDIFFERENCE関数(soundexと同じリンク上)を使用することもできます(4が最も類似しており、0が最も低い)。

SELECT DIFFERENCE('Dinosaurs', 'Dinosores'); --returns 4

編集:

マルチテキストオプションを少し探し回った後、これはそれほど簡単ではないようです。@NeilKnightが提供するFuzztLogicの回答のリンクを参照してください(私にとっては+1です!)。

このstackoverflowの記事では、TSQLでのファジーロジックの実装の可能性のあるソースについても詳しく説明しています。かつて回答者は、調査したい可能性のあるものとして全文索引付けについても概説しました。

于 2011-03-03T15:27:12.540 に答える
3

別の「検索エンジン」を導入できるかどうかはわかりませんが、Google 検索アプライアンスや Autonomy などの製品を見ると、これらの製品は SQL データベースにインデックスを付けて、より多くの検索オプションを提供できます。たとえば、スペルミスの処理も同様です。同義語、検索結果の重み付け、代替検索の推奨事項などとして。

また、SQL Server の全文検索機能はシソーラスを使用するように構成できます

一般的なスペルミスを処理するためにシソーラスを設定している人からの別の SO の質問を 次に示します。 SQL Server の FORMSOF シソーラス

于 2011-03-03T15:48:31.843 に答える
3

そこに代替案を投げるだけです。SSIS がオプションの場合は、Fuzzy Lookup を使用できます。

SSIS ファジー ルックアップ

于 2011-03-03T15:31:04.050 に答える
3

おそらくあなたのRDBMSにはSOUNDEX機能がありますか?あなたはここで誰が関与したかについて言及しませんでした。

于 2011-03-03T15:26:31.047 に答える
1

簡単に言えば、ほとんどの SQL エンジンには、「太い指」の辞書ベースの修正を行うことができるものは何も組み込まれていません。SoundEx は、似ているように聞こえる単語を検索するためのツールとして機能し、したがって音声のスペルミスを修正します。完全一致を返しません。

Google 検索の「もしかして_ _ ?」のレベルの何かが必要なようですね。特徴。見た目ほど単純ではないと言えます。10,000 フィートのレベルで、検索エンジンはこれらの各キーワードを調べて、既知の「適切な」検索用語の「辞書」に含まれているかどうかを確認します。そうでない場合は、スペルチェッカーの提案によく似たアルゴリズムを使用して、最も近い一致する辞書の単語を見つけます (指定された単語を辞書の単語に変換するために必要な文字の置換、追加、削除、および転置が最も少なくて済みます)。これには、データベースのストアド プロシージャまたは CLR Db 関数、またはビジネス ロジック レイヤーのいずれかで、いくつかの重い手続き型コードが必要になります。

于 2011-03-03T15:29:42.247 に答える