首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CONTAINSTABLE通配符在短语匹配时失败?

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

Stack Overflow用户
提问于 2011-08-09 19:09:12
回答 2查看 3.6K关注 0票数 2

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

代码语言:javascript
复制
SELECT rank,[KEY] FROM CONTAINSTABLE(tblproduct, (title,subtitle,publisher_name),  @search_text,15)

@search_text在哪里

代码语言:javascript
复制
Set @search_text = '"my favourite word*"'

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

当我省略通配符时,我得到一个精确的短语匹配,然而,其他一些短语,如"The Imperfectionists“,无论是否有通配符,都不会返回任何结果。

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

目前,如果没有为通配符生成结果集,我运行不带通配符的查询,看看是否返回任何结果。如果同样失败,我会运行一个正常的"like“语句。

显然,like语句将永远耗费时间...我不想在一个760万强的数据库上使用它进行搜索,这应该是通过全文完成的……

感谢任何人的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-11 02:08:06

根据JStead的建议,我查看了字符串的输出。我还在MSDN上找到了这个:

当是一个短语时,短语中包含的每个单词都被认为是一个单独的前缀。因此,指定前缀术语"local wine*“的查询将任何行与文本"local winery”、“local wined and dined”等进行匹配。

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

在添加*之前,我正在考虑通过sys.dm_fts_parser函数运行我的搜索字符串,删除干扰词。

票数 2
EN

Stack Overflow用户

发布于 2011-08-09 19:51:58

有一个sys函数可以准确地告诉你微软将如何搜索你输入的词条。这将告诉您它将搜索的所有单词。请使用以下内容

代码语言:javascript
复制
SELECT * FROM sys.dm_fts_parser (' "my favourite word*" ', 1033, 0, 0) 

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

您将不使用*,而是希望更新您的同义词库,以给出我最喜欢的单词的所有可能的变化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6995220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档