0

SQL Server 2008 に含まれるクエリがあります。

SELECT contacts.*, [Rank] FROM 
CONTAINSTABLE(Contacts, SearchName, '("department*") AND ("work*")') tmp 
JOIN contacts on contacts.contactid = tmp.[key]
WHERE contacts.deleted = 0

これは予想どおり 1 つの結果を返しますが、ユーザーが検索条件に「of」を入力した場合、クエリは結果を返しません。

SELECT contacts.*, [Rank] FROM 
CONTAINSTABLE(Contacts, SearchName, '("department*") AND ("of*") AND ("work*")') tmp 
JOIN contacts on contacts.contactid = tmp.[key]
WHERE contacts.deleted = 0

連絡帳のフルネームは「勤労年金課」です。

ユーザーが検索に「and」を含めた場合も同様です。これらの単語がクエリを壊しているのはなぜですか?それを回避する方法はありますか?それとも、検索を実行する前に単語を削除する必要がありますか?

4

1 に答える 1

1

ストップワードについて学ぶ必要があります。これらはドキュメンテーションでよく説明されています。

ただし、簡単に説明すると、すべての全文エンジンは索引付けされていない単語のリストを保持しています。これらの単語の中で際立っているのは、「of」、「the」、および同様のコンテンツを含まない単語などです。もちろん、これらの単語を実際に認識するようにサーバーを構成できます。そして、これは一部のアプリケーションでは非常に重要です。文書の言語を判別しようとする場合、ストップ ワードはたまたま非常に役立ちます。

いずれにせよ、「の」という単語はストップワードリストに含まれています。したがって、インデックスが作成されていないため、 を使用して検索することはできませんCONTAINSTABLE。検索する必要がある場合は、独自のカスタム ストップ ワード リストを実装して、インデックスを再構築できます。

于 2014-04-01T11:24:26.013 に答える