【问题标题】:Full text search asterisk returns wrong result全文搜索星号返回错误结果
【发布时间】:2018-06-27 17:00:08
【问题描述】:

我有一个带有 FTS 索引的 Ship 表,它被创建为:

CREATE FULLTEXT INDEX ON Ship 
(       
    Name 
)
KEY INDEX PK_Ship_Id
ON MyCatalog
WITH CHANGE_TRACKING AUTO, STOPLIST OFF;

当我在下面运行查询时:

select Name From Ship where CONTAINS(Name, N'"n*"');

我得到了错误的结果,例如“Vitamin D3 1000 Iu”。 但我只想获取名称字段中任何单词以“n”字符开头的行。

【问题讨论】:

  • 那么你不应该使用 contains,如果你想让 i 以 N 开头,使用 like 'n*'。
  • 名称字段可以有多个单词,我想在每个单词中搜索 'n' char。例如 CONTAINS(Name, N'"lol*" and "lala*"') 正好找到 "name name lollll asd lalaaaa" 字符串。

标签: sql-server full-text-search fulltext-index full-text-catalog


【解决方案1】:

FTS 引擎有一个奇怪的“功能”,当您尝试查找 CONTAINS(Name, N'"n*"') 时,它会搜索所有数字,因为它将数字保留为 NN。

在这两种情况下(CONTAINS(Name, N'"n*"'), CONTAINS(Name, N'"nn*"'))使用“like”搜索是建立的最佳决策。

【讨论】:

    猜你喜欢
    • 2015-11-10
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    相关资源
    最近更新 更多