2017-05-11 8 views
0

텍스트에 "clf"문자열이 포함되어 있으면 fts를 사용하고 이상한 동작이 나타납니다. 어떤 이유로 "clf"문자열을 가진 문서 용으로 생성 된 키워드는 "clf"대신 다른 문자열을 가진 거의 동일한 문서로 다르게 동작합니다. 우리가 키워드가"CLF"가있는 문서의 이상한 키워드

를 만들어 쿼리 할 때 우는 그런 다음 코드 설명 다시 행동

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') 

입니다

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

우리는 "CLF"와 문서 작성 키워드 "AAA"와 "BBB"로 다음 다른 것을 볼 수있다 . 예를 들어 문서 4에는 키워드 "139"가 있지만 문서 3에는 "129"가없고 "17 129 clf"만 있습니다.

이 동작의 이유는 무엇입니까? fts가 "clf"가 있거나없는 문자열에서 동일한 방식으로 동작하도록하는 간단한 방법이 있습니까?

답변

1

기술적 가치에 대한 전문 검색을 사용하는 것은 어려울 수 있습니다. stop-word-list 및 사전 언어가 검색에 영향을줍니다.

내 프로젝트에서 중지 목록 (꺼짐)을 사용 중지하고 언어를 중립으로 설정했습니다.

"포함"으로 검색하고 단어에 "*"를 사용하는 경우 다음을 기억하십시오. SQL 서버는 접두사 검색 만 할 수 있습니다!

는 여기를 참조 : 중립 언어없이 중지 목록에 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

잘 모르겠지만 데이터 정렬 설정에 의존해야합니다. –