共用方式為


SQL Server 中的英文斷詞工具不會傳回具有前置小數點的字組

本文可協助您解決使用英文斷詞工具搜尋不會傳回 Windows、SQL Server 2016、2014 和 2012 上 SQL Server 2017 前置小數點的單字的問題。

原始產品版本:SQL Server
原始 KB 編號: 3191316

徵兆

在英文語言斷詞工具中,您可以使用全文檢索索引編製內容索引,其中包含具有前置小數點的字詞,例如 .325.434.646。 當您嘗試藉由搜尋十進位值來尋找索引中的數據列時, .325不會傳回任何數據列。

因應措施

若要解決此問題,請使用下列其中一種方法:

  • 使用中性斷詞工具。
  • 當您使用英文斷詞工具時,請將零放在小數點前面。 例如,在 0.325 搜尋中使用 而不是 .325 。 英文斷詞工具會在遇到前置零時正確處理索引編製和搜尋。

重現問題的步驟

  1. 建立全文檢索索引,以建立索引,其中包含具有前置小數點的字組,例如 .325.434.646等等。

  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 保留十進位
    0x006E006E00300064003300310033 1 0 2 完全相符 nn0d325
    0x0078 1 0 3 雜訊字 x
    0x006E006E003400330038 1 0 4 完全相符 .434 保留十進位
    0x006E006E003400330038 1 0 4 完全相符 nn434
    0x003000340036 1 0 5 完全相符 .646 保留十進位
    0x006E006E00340036 1 0 5 完全相符 nn46
    0x007300680069006D 1 0 6 完全相符 Platinum
  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 搜尋時移除小數點,並移除 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 保留十進位
    0x006E006E00300064003300310033 1 0 2 完全相符 nn0d325
    0x0078 1 0 3 雜訊字 x
    0x002E003400330038 1 0 4 完全相符 .434 保留十進位
    0x006E006E00300064003400330038 1 0 4 完全相符 nn0d434
    0x002E003000340036 1 0 5 完全相符 .646 保留十進位
    0x006E006E00300064003000340036 1 0 5 完全相符 nn0d646
    0x007300680069006D 1 0 6 完全相符 Platinum

    現在,搜尋 .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