SQL包含精确的短语

时间:2015-02-25 08:57:31

标签: sql-server full-text-search contains sql-server-2014

我尝试使用" CONTAINS()"来实现搜索机制。在SQL Server 2014上。

我已经在这里阅读https://technet.microsoft.com/en-us/library/ms142538%28v=sql.105%29.aspx和#34; SQL Server 2008中的专业全文搜索"我需要使用双引号来搜索确切的短语。

但是e.q.如果我使用此CONTAINS(*, '"test"'),我会收到包含" numerictest"等字词的结果也。如果我尝试CONTAINS(*, '" test "'),它就是一样的。我注意到,结果较少,好像我会用CONTAINS(*, '*test*')搜索前缀,sufix搜索,所以搜索之间肯定有一个增量。

我没想到" numerictest"在第一个声明中。这种行为有解释吗?

2 个答案:

答案 0 :(得分:2)

我一直在讨论一个非常类似的问题,我最近找到了解决方案。

就我而言,我正在搜索" @ username"的全文字段。但使用CONTAINS(body, "@username")只返回"用户名"同样。我希望它与@符号严格匹配。

我可以使用LIKE "%@username%",但查询过了一分钟是不可接受的,所以我一直在寻找。

在聊天室的一些人的帮助下,他们建议使用CONTAINS和LIKE。所以:

SELECT TOP 25 * FROM table WHERE

CONTAINS(body, "@username") AND body LIKE "%@username%";

这对我来说非常合适,因为contains包含了username和@username记录,然后LIKE过滤掉带有@符号的记录。查询现在需要2-3秒。

我知道这是一个古老的问题,但我在搜索中遇到了它,所以得到了我认为我会发布它的答案。我希望这有帮助。

答案 1 :(得分:1)

Contains(*,'"test"')只能匹配“test”的完整字词。

Contains(*,'" test "')与上述相同

Contains(*,'"*test*"')实际上会进行PREFIX ONLY搜索,基本上会删除单词开头的任何特殊字符,并且只使用第二个*。 您无法使用全文搜索进行POSTFIX搜索。

我关注的是Contains(*)部分,这将搜索整行中的任何全文编目项。在没有看到数据的情况下很难说,但我的猜测是,你认为那行中的另一列实际上是匹配“某个地方的”测试“。