18

すべての単語を検索できるようにしたいので、ストップ ワード リストをクリアしました。インデックスを再構築しました。残念ながら、ストップ ワードを含む検索式を入力しても、行は返されません。ストップワードだけを省略しても、結果は得られます。例: "double wear stay in place" - 結果なし、"double wear stay place" - 実際に "in" を含む結果も得られます。

なぜこれができるのか誰にも分かりますか?SQL Server 2012 Express を使用しています。

どうもありがとう!

4

3 に答える 3

36

その間、私は問題を解決することができました。問題は、自分のストップ リストが実際には空だったにもかかわらず、フルテキスト カタログが自分のストップ リストではなくシステムのストップ リストに関連付けられていたことです。ストップワードおよび全文検索の問題を解決するための便利なクエリをいくつか次に示します。

ストップワードのクエリ (システムのストップワードは返しません!):

select * from sys.fulltext_stopwords

停止リストのクエリ (システム リストは返しません!):

select * from sys.fulltext_stoplists

カタログに含まれる単語を確認します。

SELECT * FROM sys.dm_fts_index_keywords(DB_ID('dbname'), OBJECT_ID('tablename'))

関連付けを確認します。

select fulltext_catalog_id,stoplist_id, * from sys.fulltext_indexes;

ストップリストをオフにします:

ALTER FULLTEXT INDEX ON CremeSearchFT SET STOPLIST = OFF

誰かの役に立てば幸いです。:)

于 2012-10-06T11:24:04.337 に答える
7

私の調査によると、これはフルテキスト インデックスの主要なプロパティの 1 つであるフルテキスト インデックスのストップ リスト オプションに関連しています。このオプションを「システム」に設定すると、「システム ストップ リスト」に含まれるすべてのキーワードがCONTAINS()句で使用できなくなり、残念ながらそのような場合の結果セットはありません。解決;

このオプションを「オフ」に設定すると、言語セットのストップ リスト チェックがバイパスされます。たとえば、英語ではyou 、トルコ語ではsenです。これらはストップ ワードとしてマークされており、"system" オプションを設定しない限り、そのような検索で SQL Server エンジンを除外する意味があります。したがって、「システム」オプションは使用しないでください。これを行うには、テーブルが存在するデータベースで次のスクリプトを実行します。

ALTER FULLTEXT INDEX ON table_name SET STOPLIST = OFF

独自の停止リストを作成するには。この場合、特別なストップ ワードを定義して、特定のストップ リストを作成できます。そのため、SQL Server エンジンには意味がないため、これらのものだけが扱われます。作成したら、次のスクリプトを実行して使用を開始できます。

CREATE FULLTEXT STOPLIST myStoplist

GO

ALTER FULLTEXT STOPLIST [myStoplist] ADD 'you' LANGUAGE 'English'

GO

ALTER FULLTEXT INDEX ON table_name SET STOPLIST = [myStoplist]

GO

これがお役に立てば幸いです:)頑張ってください...

于 2015-07-30T05:50:48.160 に答える