web-dev-qa-db-ja.com

SQL 2008:全文検索クエリのストップワードをオフにする

私はこれに対する良い解決策を見つけるのにかなりの困難を抱えています:

「会社」というテーブルがあり、「名前」という列があるとします。このコラムにはフルテキストのカタログがあります。ユーザーが「Very Good Company」を検索した場合、私のクエリは次のようになります。

SELECT
    *
FROM
    Company
WHERE
    CONTAINS(Name, '"Very" AND "Good" AND "Company"')

この例の問題は、「Very」という単語がストップワードの標準リストに表示されることです。

SELECT
    ssw.*
FROM
    sys.fulltext_system_stopwords ssw
WHERE
    ssw.language_id = 1033;

「Very Good Company」という名前の行があるにもかかわらず、クエリは行なしで返されます。

私の質問は、クエリのストップワードをオフにするにはどうすればよいですか?または、それらを完全に削除するにはどうすればよいですか?

それとも、この検索について別の方法がありますか?

26
John

他の誰かがこの問題に遭遇した場合:

2008年にこれを行うオプションがあるようです。データベースが2005年からアップグレードされたため、これはオプションではなかったため、私にはわかりませんでした。

最初に行う必要があるのは、2008年までの互換性レベルを設定することです。

ALTER DATABASE [MyDatabase] SET COMPATIBILITY_LEVEL = 100

次に、ウィザードを使用してフルテキストインデックスを作成するときに、インデックスのストップワードを無視できるようにする手順があります。

編集:これも行うスクリプトは次のとおりです。

ALTER FULLTEXT INDEX ON MyTable SET STOPLIST = OFF
45
John

SQL Serverのデフォルトでは、ストップワードは無視されません。

これはあなたがしたいことです:

sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'transform noise words', 1;
RECONFIGURE;
GO

REF: http://msdn.Microsoft.com/en-us/library/ms187914%28v=sql.100%29.aspx

16

今日、全文検索でこの問題が発生していました。

151-663049 - returns result
151-66304 - no result
151-6630 - no result
151-663 - no result
151-66 - no result
151-6 - returns result
151 - returns result
151 returns result

しかし、私は問題を回避するために、各検索の最後に*を追加するように言う投稿を読みました。 http://social.msdn.Microsoft.com/Forums/sqlserver/en-US/fae33a6b-7c7c-4c11-842c-ca5277ed824f/ms-sql-server-2008-r2-fulltext-search-problem

151-663049* - returns result
151-66304* - returns result
151-6630* - returns result
151-663* - returns result
151-66* - returns result
151-6* - returns result
151-* - returns result
151* - returns result

したがって、パラメーターで*を検索に追加して、問題を解決します。

0
Prescient