我有一个搜索查询,它接受用户输入的短语,应该返回一个结果,下面是一个示例:
SELECT rank,[KEY] FROM CONTAINSTABLE(tblproduct, (title,subtitle,publisher_name), @search_text,15)@search_text在哪里
Set @search_text = '"my favourite word*"'该短语与数据库中的一本书的标题完全匹配。但是,通配符(*)使其不返回任何结果。
当我省略通配符时,我得到一个精确的短语匹配,然而,其他一些短语,如"The Imperfectionists“,无论是否有通配符,都不会返回任何结果。
为什么会这样呢?我可以检查什么?
目前,如果没有为通配符生成结果集,我运行不带通配符的查询,看看是否返回任何结果。如果同样失败,我会运行一个正常的"like“语句。
显然,like语句将永远耗费时间...我不想在一个760万强的数据库上使用它进行搜索,这应该是通过全文完成的……
感谢任何人的帮助!
发布于 2011-08-11 02:08:06
根据JStead的建议,我查看了字符串的输出。我还在MSDN上找到了这个:
当是一个短语时,短语中包含的每个单词都被认为是一个单独的前缀。因此,指定前缀术语"local wine*“的查询将任何行与文本"local winery”、“local wined and dined”等进行匹配。
因此,单词My默认情况下被认为是“干扰词”。添加*会使解析器查找以My开头的任何单词。但是,在搜索索引时,单词My似乎已经被删除(请记住,它是一个干扰词),因此它找不到匹配的单词。
在添加*之前,我正在考虑通过sys.dm_fts_parser函数运行我的搜索字符串,删除干扰词。
发布于 2011-08-09 19:51:58
有一个sys函数可以准确地告诉你微软将如何搜索你输入的词条。这将告诉您它将搜索的所有单词。请使用以下内容
SELECT * FROM sys.dm_fts_parser (' "my favourite word*" ', 1033, 0, 0) 有关此函数的更多信息,请访问http://msdn.microsoft.com/en-us/library/cc280463.aspx
您将不使用*,而是希望更新您的同义词库,以给出我最喜欢的单词的所有可能的变化。
https://stackoverflow.com/questions/6995220
复制相似问题