使用contains进行SQL Server全文搜索。将文本序列与一个字符匹配

使用contains进行SQL Server全文搜索。将文本序列与一个字符匹配,sql,sql-server,indexing,full-text-search,Sql,Sql Server,Indexing,Full Text Search,我有全文索引的列名searchMeta 它可以包含如下字符串 “模块A” “模块B” “Lorem Ipsum,模块A,这里还有一些东西” “模块R6,这里还有一些东西” 将运行并返回最后一行 但是做 SELECT searchMeta from Metadata m where contains(m.SearchMeta, '"Module A"') 将返回所有行,而不仅仅是带有模块A的行 我认为这是因为包含过程只匹配至少两个字符的字符串。我能做点什么吗?我找到了解决办法。我从标准系

我有全文索引的列名searchMeta

它可以包含如下字符串

  • “模块A”
  • “模块B”
  • “Lorem Ipsum,模块A,这里还有一些东西”
  • “模块R6,这里还有一些东西”

将运行并返回最后一行

但是做

SELECT searchMeta from Metadata m where contains(m.SearchMeta, '"Module A"') 
将返回所有行,而不仅仅是带有模块A的行


我认为这是因为包含过程只匹配至少两个字符的字符串。我能做点什么吗?

我找到了解决办法。我从标准系统停止列表中创建了一个新的停止列表,并删除了在我的特定场景中有用的“a”、“B”、“C”、“R”。“我已经更新了全文索引以使用自定义停止列表”

如果更重要的是有一个精确的算法而不是一个快速的算法,那么像“%”模块a“%”这样的m.SearchMeta可能会起作用,您可能需要转义字符才能使用引号,尽管您也可以尝试包含(m.SearchMeta,“模块a”)为了找到确切的字符串模块A,实际上我认为这可能只是找到任何有单词模块和单独字母A的东西。这不是一个选项,我有数以百万计的记录。使用“LIKE”将花费相当长的时间。显然,全文索引附带了一个停止词列表。这些词包括所有一个字符的词和不利于搜索的常用词,如on、in、an、the、。。。等等,在我的例子“A”
SELECT searchMeta from Metadata m where contains(m.SearchMeta, '"Module A"')