相关文章推荐
傲视众生的电脑桌  ·  raise ...·  4 月前    · 
谦逊的针织衫  ·  java - Find first ...·  1 年前    · 
慷慨的蚂蚁  ·  xamarin - WiFiManager ...·  1 年前    · 

本文可帮助你解决以下问题:使用英语断字符进行搜索时,在 Windows SQL Server 2017、SQL Server 2016、2014 和 2012 中返回具有前导小数点的单词。

原始产品版本: SQL Server
原始 KB 编号: 3191316

在英语断字符中,使用全文索引为包含具有前导小数点的单词的内容编制索引,例如 .325 、、 .434 .646 。 尝试通过搜索十进制值 ((例如,) )来查找索引中的行时, .325 不会返回任何行。

若要解决此问题,请使用以下方法之一:

  • 使用中性断字符。
  • 使用英语断字符时,将零放在小数点前面。 例如, 0.325 在搜索中使用 而不是 .325 。 遇到前导零时,英语断字符可以正确处理索引和搜索。
  • 重现问题的步骤

  • 创建全文索引以创建索引,该索引包含具有前导小数点的单词,例如 .325 .434 .646 等。

  • 使用以下全文查询通过 LCID 为 1033 的英语断字符搜索这些值:

    Select * from sys.dm_fts_parser('"Ring, .325 x .434 .646 Platinum"', 1033, 0,0)
    group_id
    phrase_id
    special_term
    display_term
    
  • 尝试搜索 .325 (,包括小数点) :

    Select * from sys.dm_fts_parser('.325', 1033, 0,0) Using English word breaker to specify the ".325" search term.
    

    我们没有得到匹配。

    group_id phrase_id special_term display_term

    在此示例中,如果输入 .325 作为搜索值,则不会返回任何行。 这是因为我们通过保留小数点为数据编制了索引,但英语断字符在搜索过程中删除了小数点。 因此,我们无意中搜索了 325 而不是 .325,并且找不到匹配项。

    如果使用中性断字符,则使用英语断字符搜索具有前导小数点的单词的全文索引可以正常工作。

  • 使用非特定断字符运行以下查询:

    Select * from sys.dm_fts_parser('"Ring, .325 x .434 .646 Platinum"', 0, 0,0)
    group_id
    phrase_id
    special_term
    display_term
    

    现在,搜索按 .325 预期方式工作。

    Select * from sys.dm_fts_parser('.325', 0, 0,0) Specifying Neutral word breaker.
    group_id
    phrase_id
    special_term
    display_term
    
  •