CONTAINSTABLE通配符在短语匹配时失败



我有一个搜索查询,它接受用户输入的短语,并应该返回一个结果,下面是一个示例:

SELECT rank,[KEY] FROM CONTAINSTABLE(tblproduct, (title,subtitle,publisher_name),  @search_text,15)

其中@search_text为

Set @search_text = '"my favourite word*"'

这个短语与数据库中某本书的标题完全匹配。但是,通配符(*)使它不返回任何结果。

当我省略通配符时,我得到了一个精确的短语匹配,然而,其他一些短语,如"the Imperfectionists"无论是否使用通配符都不返回结果。

为什么会这样?我可以查什么?

目前,如果没有为通配符生成结果集,我运行不带通配符的查询,看看它是否返回任何内容。如果也失败了,我运行一个普通的"like"语句。

显然,类似的语句将永远持续下去…我不想在一个760万人的数据库中使用它来搜索一个应该用全文完成的搜索…

感谢任何帮助!

根据JStead的建议,我查看了字符串的输出。我也在MSDN:

找到了这个

当是短语时,该短语中包含的每个单词都是被认为是一个单独的前缀。因此,指定a的查询"local wine*"的前缀项匹配文本为"local"的任何行"酒庄"、"当地美酒佳肴"等等。

因此,默认情况下,单词My被认为是一个"噪声词"。添加*会使解析器查找任何以My开头的单词。但是,在搜索索引时,单词My似乎已经被删除了(记住,它是一个噪声词),因此它找不到匹配项。

我正在考虑通过sys.dm_fts_parser函数运行我的搜索字符串,删除噪声词,然后添加*.

有一个sys函数,它告诉你微软将如何搜索你输入的词。它会告诉你它要搜索的所有单词。使用以下

SELECT * FROM sys.dm_fts_parser (' "my favourite word*" ', 1033, 0, 0) 

有关此函数的更多信息http://msdn.microsoft.com/en-us/library/cc280463.aspx

而不是使用*,你会想要更新你的同义词典,给你所有可能的变化我最喜欢的单词。

最新更新