私はこれに対する良い解決策を見つけるのにかなりの困難を抱えています:
「会社」というテーブルがあり、「名前」という列があるとします。このコラムにはフルテキストのカタログがあります。ユーザーが「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」という名前の行があるにもかかわらず、クエリは行なしで返されます。
私の質問は、クエリのストップワードをオフにするにはどうすればよいですか?または、それらを完全に削除するにはどうすればよいですか?
それとも、この検索について別の方法がありますか?
他の誰かがこの問題に遭遇した場合:
2008年にこれを行うオプションがあるようです。データベースが2005年からアップグレードされたため、これはオプションではなかったため、私にはわかりませんでした。
最初に行う必要があるのは、2008年までの互換性レベルを設定することです。
ALTER DATABASE [MyDatabase] SET COMPATIBILITY_LEVEL = 100
次に、ウィザードを使用してフルテキストインデックスを作成するときに、インデックスのストップワードを無視できるようにする手順があります。
編集:これも行うスクリプトは次のとおりです。
ALTER FULLTEXT INDEX ON MyTable SET STOPLIST = OFF
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
今日、全文検索でこの問題が発生していました。
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
したがって、パラメーターで*を検索に追加して、問題を解決します。