2017-05-11 1 views
0

私はftsを使用していて、テキストに文字列 "clf"が含まれていると奇妙な動作が見られました。何らかの理由で、 "clf"文字列を持つ文書のために作成されたキーワードは、 "clf"の代わりに他の文字列を持つほとんど同じ文書とは動作が異なります。私たちは、キーワードが"CLF"の文書の奇妙なキーワード

SELECT * FROM sys.dm_fts_index_keywords_by_document(DB_ID('db_name'), OBJECT_ID('dbo.test1')) 

を作成照会するときベローは、その後、我々は「CLF」との文書のために作成されたキーワードは、「AAA」と「BBB」と、その後異なっていることがわかります説明した動作

CREATE TABLE [dbo].[test1](
    [id] [int] NOT NULL, 
    [data] [nvarchar](max) NULL, 
CONSTRAINT [PK_test1] PRIMARY KEY CLUSTERED 
(
    [id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 


CREATE FULLTEXT CATALOG test_catalog; 

CREATE FULLTEXT INDEX ON [dbo].test1 
( 
    data 
) 
KEY INDEX [PK_test1] ON test_catalog 

insert into dbo.test1 values (1, N'17 12 CLF'), (2, N'17 13 bbb'), (3, N'17 129 CLF'), (4, N'17 139 aaa') 

を再作成するためのコードです。たとえば、文書4の場合、キーワード「139」がありますが、文書3の場合は「129」はなく、「17 129 clf」しかありません。

この動作の理由は何ですか? ftsが "clf"の有無にかかわらず同じ方法で動作するようにする簡単な方法はありますか?

答えて

1

テクニカルバリューに関する全文検索を使用するのは難しいことがあります。 stop-word-listと辞書の言語が検索に影響します。

私は自分のプロジェクトでストップリスト(オフ)を無効にし、言語をニュートラルに設定しました。

"contains"で検索していて、単語に "*"を使用している場合は、次のことを覚えておいてください。 SQL Serverではプレフィックス検索のみが可能です。

はこちらをご覧ください:ニュートラル言語と、それは同じに見えるなしストップリストと https://technet.microsoft.com/en-us/library/ms187787%28v=sql.105%29.aspx

文書3:

129 
17 
17 129 
clf 
nn129 
nn17 
nn17129 

文書4:それはどのように影響するか

139 
17 
17 139 
aaa 
nn139 
nn17 
nn17139 
+0

テキストをアクセントで検索(CONTAINSを使用)しますか? – abc667

+0

わかりませんが、照合設定に依存する必要があります。 –