1

たくさんの顧客がいるデータベースがあります。システムのユーザーは、とりわけ、名前で顧客のアカウントを検索できることを望んでいます。

私が行ったことは、CustomerFullTextという新しいテーブルを作成することです。このテーブルには、CustomerIdとnvarchar(max)フィールド「CustomerFullText」があります。「CustomerFullText」では、顧客のすべてのテキスト(名、姓、住所など)を連結し、そのフィールドにフルテキストインデックスを設定して、ユーザーが1つだけ入力できるようにします。検索ボックスと一致する結果を取得します。

これは、多くの異なる列に格納されているデータを検索しようとするよりも良い結果をもたらすことがわかりましたが、これ自体がひどい考えであるかどうかを聞きたいと思います。

多くの人は同じように聞こえますが、綴りが異なる名前を持っています。キャサリンとキャサリンとキャサリン、そしておそらくデータベースに記録されている人はキャサリンですが、ケイトとして自己紹介します。また、マクドナルド対マクドナルド、リズ対エリザベスなど。

したがって、私が行っているのは、元の名前を正しく保存しながら、フルテキストを作成する前に一連の置換を行うことです。そのため、キャサリンやキャセインなどはすべて、全文フィールドで「KATE」に置き換えられます。データベースにクエリを実行する前に、検索パラメータに対して同じ変換を行うため、検索ボックスに「Catherine」と入力すると、データベース内の全文インデックスに対して「KATE」のクエリが実際に実行されます。これは、CatherineとKatherineに一致します。等々。

私の質問は、これは既存のSQL Serverフルテキスト機能の一部を複製しますか?見てみましたが、カスタムステマーやワードブレーカーなどと同じではないと思います。

4

1 に答える 1

2

自分でデータを音声的に正規化しようとするのではなく、基本的に基本的なSOUNDEXのアイデアのはるかに優れた実装であるDoubleMetaphoneアルゴリズムを使用します。

実装例はここにあります:http ://www.sqlteam.com/forums/topic.asp?TOPIC_ID = 13574 、およびその他は上記のウィキペディアのリンクにリストされています。

それはあなたの単語の2つの正規化されたコードバージョンを生成します。次に、それらを2つの追加の列に保持し、検索テキストと比較して、その場でDoubleMetaphoneに変換できます。

于 2012-03-15T16:44:27.167 に答える