이 문서는 영어 단어 분리기를 사용하여 검색하는 경우 Windows, SQL Server 2016, 2014 및 2012의 SQL Server 2017에서 소수점 앞에 있는 단어를 반환하지 않는 문제를 해결하는 데 도움이 됩니다.
원래 제품 버전: SQL Server
원래 KB 번호: 3191316
증상
영어 단어 분리기에서 전체 텍스트 인덱스를 사용하여 앞에 오는 소수점(예: .325
.434
10진수)이 있는 단어가 포함된 콘텐츠를 인덱싱합니다.646
. 10진수 값(예 .325
: )을 검색하여 인덱스의 행을 찾으려고 하면 행이 반환되지 않습니다.
해결 방법
이 문제를 해결하려면 다음 방법 중 하나를 사용합니다.
- 중립 단어 분리기를 사용합니다.
- 영어 단어 분리기를 사용할 때 소수점 앞에 0을 놓습니다. 예를 들어 검색 대신
.325
사용합니다0.325
. 영어 단어 분리기는 앞에 오는 0이 발견되면 인덱싱 및 검색을 올바르게 처리합니다.
문제를 재현하기 위한 단계
전체 텍스트 인덱스를 만들어 선행 소수점(예:
.325
.434
.646
10진수)이 있는 단어가 포함된 인덱스를 만듭니다.다음 전체 텍스트 쿼리를 사용하여 LCID가 1033인 영어 단어 분리기를 사용하여 이러한 값을 검색합니다.
SELECT * FROM sys.dm_fts_parser('"Ring, .325 x .434 .646 Platinum"', 1033, 0,0)
결과
keyword group_id phrase_id occurrence special_term display_term 주의 0x007700610073006800650072 1 0 1 정확하게 일치 Ring 0x002E003300310033 1 0 2 정확하게 일치 .325 10진수를 유지합니다. 0x006E006E00300064003300310033 1 0 2 정확하게 일치 nn0d325 0x0078 1 0 3 노이즈 단어 x 0x006E006E003400330038 1 0 4 정확하게 일치 .434 10진수를 유지합니다. 0x006E006E003400330038 1 0 4 정확하게 일치 nn434 0x003000340036 1 0 5 정확하게 일치 .646 10진수를 유지합니다. 0x006E006E00340036 1 0 5 정확하게 일치 nn46 0x007300680069006D 1 0 6 정확하게 일치 플래티넘 검색
.325
을 시도합니다(소수점 포함).SELECT * FROM sys.dm_fts_parser('.325', 1033, 0,0) -- Using English word breaker to specify the ".325" search term.
참고 항목
우리는 일치하는 것을 얻지 못합니다.
결과
keyword group_id phrase_id occurrence special_term display_term 주의 0x003300310033 1 0 1 정확하게 일치 325 검색할 때 10진수를 제거하고 325 <> .325를 제거하므로 행이 반환되지 않습니다. 0x006E006E003300310033 1 0 1 정확하게 일치 nn325 이 예제에서는 검색 값으로 입력
.325
하면 행이 반환되지 않습니다. 소수점을 유지하여 데이터를 인덱싱했지만 검색 프로세스 중에 영어 단어 분리기가 소수점을 제거하기 때문입니다. 따라서 실수로 대신 325.325
를 검색하고 일치하는 항목을 찾을 수 없습니다.영어 단어 분리기를 사용하여 전체 텍스트 인덱스 검색에서 소수점 앞에 오는 단어는 중립 단어 분리기를 사용하는 경우 올바르게 작동합니다.
중립 단어 분리기를 사용하여 다음 쿼리를 실행합니다.
SELECT * FROM sys.dm_fts_parser('"Ring, .325 x .434 .646 Platinum"', 0, 0,0)
결과
keyword group_id phrase_id occurrence special_term display_term 주의 0x007700610073006800650072 1 0 1 정확하게 일치 Ring 0x002E003300310033 1 0 2 정확하게 일치 .325 10진수를 유지합니다. 0x006E006E00300064003300310033 1 0 2 정확하게 일치 nn0d325 0x0078 1 0 3 노이즈 단어 x 0x002E003400330038 1 0 4 정확하게 일치 .434 10진수를 유지합니다. 0x006E006E00300064003400330038 1 0 4 정확하게 일치 nn0d434 0x002E003000340036 1 0 5 정확하게 일치 .646 10진수를 유지합니다. 0x006E006E00300064003000340036 1 0 5 정확하게 일치 nn0d646 0x007300680069006D 1 0 6 정확하게 일치 플래티넘 이제 검색은
.325
예상대로 작동합니다.SELECT * FROM sys.dm_fts_parser('.325', 0, 0,0) -- Specifying Neutral word breaker.
결과
keyword group_id phrase_id occurrence special_term display_term 주의 0x002E003300310033 1 0 1 정확하게 일치 .325 0x006E006E00300064003300310033 1 0 1 정확하게 일치 nn0d325