【问题标题】:Search for part of the word in the phrase with full text search in SQL Server 2016在 SQL Server 2016 中使用全文搜索在短语中搜索部分单词
【发布时间】:2020-05-31 13:35:05
【问题描述】:

在 Microsoft SQL Server 中,当我们使用全文搜索来搜索值时,我们的搜索仅限于起始词。也就是说,我们无法搜索包含中间看起来像LIKE 运算符的单词。

我尝试执行此查询,但结果不是我的意见。

我想搜索词的中间部分。例如,如果我的术语是“Microsoft”并且我的查询是:

SELECT * 
FROM dbo.SMS_Outbox 
WHERE CONTAINS(MessageText, N'"*soft*"')  

没有返回结果!

【问题讨论】:

  • 这不是全文索引的作用。它索引单词,而不是单词的一部分。您必须使用LIKE 来执行此操作;这不会是 SARGable。

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


【解决方案1】:

documentation 非常清楚,通配符只允许在搜索词的末尾:

CONTAINS 谓词支持使用星号 (*) 作为通配符来表示单词和短语。 您只能在单词或短语的末尾添加星号。星号的存在启用前缀匹配模式。在此模式下,如果列包含指定的搜索词后跟零个或多个其他字符,则返回匹配项。

你不能轻易地做你想做的事。一个简单的选择是切换到LIKE 并接受性能打击:

WHERE MessageText LIKE N'%soft%'

另一种选择可能是以soft 始终位于搜索词开头的方式解析您的文本。

【讨论】:

  • WHERE MessageText LIKE N'%soft%' 是否仍会受益于FULLTEXT 索引,还是只是对MessageText 进行常规索引扫描?
猜你喜欢
  • 2017-03-20
  • 2011-02-17
  • 2015-06-15
  • 1970-01-01
  • 2011-02-27
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多