29

これに対する適切な解決策を見つけるのにかなり苦労しています:

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

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

問題はこの例にあります。「非常に」という単語が標準のストップワード リストに表示されます。

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

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

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

または、この検索について別の方法がありますか?

4

3 に答える 3

47

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

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

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

ALTER DATABASE [MyDatabase] SET COMPATIBILITY_LEVEL = 100

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

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

ALTER FULLTEXT INDEX ON MyTable SET STOPLIST = OFF
于 2011-12-08T19:21:06.497 に答える
17

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

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

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

参照:http ://msdn.microsoft.com/en-us/library/ms187914%28v=sql.100%29.aspx

于 2012-05-04T14:59:48.090 に答える
1

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

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

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

于 2013-09-16T18:17:50.370 に答える