다음을 통해 공유


선행 소수점이 있는 단어는 SQL Server의 영어 단어 분리기에서 반환되지 않습니다.

이 문서는 영어 단어 분리기를 사용하여 검색하는 경우 Windows, SQL Server 2016, 2014 및 2012의 SQL Server 2017에서 소수점 앞에 있는 단어를 반환하지 않는 문제를 해결하는 데 도움이 됩니다.

원래 제품 버전: SQL Server
원래 KB 번호: 3191316

증상

영어 단어 분리기에서 전체 텍스트 인덱스를 사용하여 앞에 오는 소수점(예: .325.43410진수)이 있는 단어가 포함된 콘텐츠를 인덱싱합니다.646. 10진수 값(예 .325: )을 검색하여 인덱스의 행을 찾으려고 하면 행이 반환되지 않습니다.

해결 방법

이 문제를 해결하려면 다음 방법 중 하나를 사용합니다.

  • 중립 단어 분리기를 사용합니다.
  • 영어 단어 분리기를 사용할 때 소수점 앞에 0을 놓습니다. 예를 들어 검색 대신 .325 사용합니다0.325. 영어 단어 분리기는 앞에 오는 0이 발견되면 인덱싱 및 검색을 올바르게 처리합니다.

문제를 재현하기 위한 단계

  1. 전체 텍스트 인덱스를 만들어 선행 소수점(예: .325.434.64610진수)이 있는 단어가 포함된 인덱스를 만듭니다.

  2. 다음 전체 텍스트 쿼리를 사용하여 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 정확하게 일치 플래티넘
  3. 검색 .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를 검색하고 일치하는 항목을 찾을 수 없습니다.

    영어 단어 분리기를 사용하여 전체 텍스트 인덱스 검색에서 소수점 앞에 오는 단어는 중립 단어 분리기를 사용하는 경우 올바르게 작동합니다.

  4. 중립 단어 분리기를 사용하여 다음 쿼리를 실행합니다.

    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