SQL 包含精确短语

Mar*_*son 6 sql-server full-text-search contains sql-server-2014

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

我在这里阅读了https://technet.microsoft.com/en-us/library/ms142538%28v=sql.105%29.aspx和我需要的“SQL Server 2008 中的专业全文搜索”一书使用双引号来搜索精确的短语。

但是 eq 如果我使用它,CONTAINS(*, '"test"')我也会收到包含“numerictest”之类的词的结果。如果我尝试CONTAINS(*, '" test "')它是一样的。我注意到,结果较少,就像我会搜索CONTAINS(*, '*test*')前缀、后缀搜索一样,因此搜索之间肯定存在差异。

我没想到第一个语句中的“numerictest”。这种行为有解释吗?

Tho*_* Le 6

我一直在绞尽脑汁地思考一个非常相似的问题,最近我找到了解决方案。

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

我可以使用LIKE "%@username%",但查询花了一分钟多的时间,这是不可接受的,所以我继续寻找。

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

SELECT TOP 25 * FROM table WHERE

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

这对我来说非常有用,因为 contains 会提取用户名和 @username 记录,然后 LIKE 会过滤掉带有 @ 符号的记录。现在查询需要 2-3 秒。

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


小智 3

Contains(*,'"test"')只会按照您的预期匹配“test”的完整单词。

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

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

我关心的是 Contains(*) 部分,这将搜索整行中的任何全文编目项目。如果没有看到数据,很难说,但我的猜测是,您认为不好的该行中的另一列实际上与某处的“测试”匹配。