1

SQL 全文索引付けで奇妙な問題が発生しています。基本的に、メールアドレスを格納するために使用される列を検索しています。1つを除いて、私がテストしたすべてのケースで期待どおりに機能しているようです!

SELECT *
FROM Table
WHERE CONTAINS(Email, '"email@me.com"') 

特定のメールアドレスについては、上記の「メール」の部分を完全に無視し、代わりに実行しています

SELECT *
FROM Table
WHERE CONTAINS(Email, '@me.com') 

これが起こっていることがわかったのは1つのケースだけでした。インデックスを再作成しましたが、喜びはありません。カタログも作り直しました。

何か案は??

編集: 誰かの電子メール アドレスを公開 Web サイトに掲載することはできないため、より適切な例を挙げます。問題を引き起こしているのは次の形式です。

a.b.c@somedomain.net.au

私がする時

WHERE CONTAINS(Email, "'a.b.c@somedomain.net.au"')

返される一致する行はすべて.*@somedomain.net.au. a.b.cつまり、その部分を無視しています。

4

1 に答える 1

2

フルテキスト インデックスでは、ピリオドはノイズ ワード (またはストップ ワード) として扱われます。システム ストップ ワードを確認すると、除外された文字のリストを見つけることができます。

SELECT * FROM sys.fulltext_system_stopwords WHERE language_id = 2057 -- これはイギリス英語の言語 ID です (適宜変更してください)

したがって、「abc@somedomain.net.au」であるメールアドレスは実際には「abc@somedomain.net.au」として扱われ、この特定のケースでは、個々の文字もインデックスから除外されるため、「@somedomain」で検索することになります.net.au」

実際には 2 つの選択肢があります。インデックスを作成する前に含めたい文字を置き換える (特殊文字を一致タグに置き換える) か、含める単語/文字を全文ストップリストから削除するかのいずれかです。

NT// 後者を選択した場合、インデックスが大幅に肥大化する可能性があるため、注意が必要です。

ここにあなたを助けるはずのいくつかのリンクがあります:

全文検索のストップワードとストップリストの構成と管理

全文ストップリストの作成

于 2012-12-18T15:15:09.283 に答える