【发布时间】:2015-04-27 04:48:32
【问题描述】:
我尝试在 SQL Server 2014 上使用“CONTAINS()”实现搜索机制。
我在这里阅读了https://technet.microsoft.com/en-us/library/ms142538%28v=sql.105%29.aspx 和“SQL Server 2008 中的专业全文搜索”一书,我需要使用双引号来搜索确切的短语。
但是等式。如果我使用这个CONTAINS(*, '"test"') 我也会收到包含“numerictest”之类的单词的结果。如果我尝试CONTAINS(*, '" test "') 它是一样的。我注意到,结果较少,就像我用CONTAINS(*, '*test*') 搜索前缀、后缀搜索一样,所以搜索之间肯定存在增量。
我没想到第一个语句中的“numerictest”。这种行为有解释吗?
【问题讨论】:
-
首先,您提供的链接上的间距与您的示例代码不同,您是否尝试过:
CONTAINS(*, ' "test" ') -
这不是 Contains() 应该做的吗? 'test' 肯定包含在 'numerictest' 中。我猜这确切意味着它会搜索一个特定的术语,而不是像 FREETEXT() 那样搜索该术语的术语 + 变形。
-
CONTAINS(*, ' "test" ')结果与前两个相同。我会使用 LIKE 进行精确搜索,但这需要很长时间。目前唯一的解决方案是使用CONTAINS(*, ' "test" ')进行两次搜索,然后再次过滤代码中的结果......不是很漂亮...... -
精确搜索是什么意思?你的意思是它应该只匹配“测试”吗?如果是这样,那么您可以使用等号运算符(='test')而不是
LIKE(由于模式匹配而速度较慢)。如果您决定使用contains()方法,请将其包装在 CTE(公用表表达式)中,然后针对该方法进行查询。 -
@MariaGustavson 您所看到的不是 CONTAINS 应该工作的方式。如果您搜索“test”,则它不应匹配“numerictest”。所以肯定有问题。您是否配置了自定义分词器?是否有多个全文索引列,其中一个列可能包含“测试”?您是否尝试过重新填充全文索引?
标签: sql-server full-text-search contains sql-server-2014