加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

在SQL Server中使用全文搜索的奇怪行为

发布时间:2020-12-12 06:40:53 所属栏目:MsSql教程 来源:网络整理
导读:我有一个带有列消息NVARCHAR(MAX)的MyTable. ID为1的记录包含消息’0123456789333444 Test’ 当我运行以下查询时 DECLARE @Keyword NVARCHAR(100)SET @Keyword = '0123456789000001*'SELECT *FROM MyTableWHERE CONTAINS(Message,@Keyword) 记录ID 1显示在结
我有一个带有列消息NVARCHAR(MAX)的MyTable.

ID为1的记录包含消息’0123456789333444 Test’

当我运行以下查询时

DECLARE @Keyword NVARCHAR(100)

SET @Keyword = '0123456789000001*'

SELECT *
FROM MyTable
WHERE CONTAINS(Message,@Keyword)

记录ID 1显示在结果中,在我看来它不应该因为0123456789333444不包含0123456789000001.

有人可以解释为什么记录会出现吗?

编辑

select * from sys.dm_fts_parser('"0123456789333444 Test"',1033,0)

返回以下内容:

group_id phrase_id occurrence special_term  display_term        expansion_type source_term
1        0         1           Exact Match  0123456789333444    0              0123456789333444 Test
1        0         1           Exact Match  nn0123456789333444  0              0123456789333444 Test
1        0         2           Exact Match  test                0              0123456789333444 Test

解决方法

这是因为@Keyword没有用双引号括起来.这会强制零,一个或多个匹配.

Specifies a match of words or phrases beginning with
the specified text. Enclose a prefix term in double quotation marks
(“”) and add an asterisk () before the ending quotation mark,so that
all text starting with the simple term specified before the asterisk
is matched. The clause should be specified this way: CONTAINS (column,
‘”text
“‘). The asterisk matches zero,one,or more characters (of the
root word or words in the word or phrase). If the text and asterisk
are not delimited by double quotation marks,so the predicate reads
CONTAINS (column,‘text*’),full-text search considers the asterisk as
a character and searches for exact matches to text*. The full-text
engine will not find words with the asterisk (*) character because
word breakers typically ignore such characters.

When is a phrase,each word contained in the phrase is
considered to be a separate prefix. Therefore,a query specifying a
prefix term of “local wine*” matches any rows with the text of “local
winery”,“locally wined and dined”,and so on.

看看关于这个主题的MSDN. MSDN

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读