Sqlserver中Contains谓词使用

整理一下CONTAINS的各种用法,主要记录一种效果是可与NEAR函数结合实现简易的文本语义分析。

CONTAINS用在条件语句中,句法是CONTAINS(fullText_column,'search contents')

第一种情况——查找是否含有某个单词:

SELECT column_1, column_2

FROM table_name

WHERE CONTAINS(column_1,'text')

Note: text即需要查找的单词,用单引号括起来。


第二种情况——查找是否含有某个词组:

SELECT column_1, column_2

FROM table_name

WHERE CONTAINS(column_1,'"text1 text2"')

Note: text1 text2即需要查找的词语,在单引号中,额外用双引号括起来。


第三种情况——查找以特定词开头的内容:

SELECT column_1, column_2

FROM table_name

WHERE CONTAINS(column_1,'"text*"')

Note: 关键词text + *会返回包含类似text1、text2等字符串的内容。


第四种情况——与NEAR函数结合使用,实现简单的NLP效果:

先说NEAR函数,示例:NEAR((text1,text2),3,true) or Near((text3,text4,text5),5)

如果text是英文:

NEAR((text1,text2),3,true)会返回包含text1和text2 且 1与2之间的间隔不超过3个内容,关键词true可选添加,不添加默认false。如果添加true,则必须text1出现在text2的前方。此处的text即英文单词,以单词为间隔的单位,不超过3个内容即不超过3个单词的距离。

如果text是中文:

Near((text3,text4,text5),6)包含多个search_text,text4为text3和text5之间的non_search即不包含该词。同时这里的间隔设为6,与英文不同,并非六个中文字,而是十二个中文字,一个间隔计算两个字符位置,包括标点符号。

例如:

“出差旅游非常不错酒店,临苏州河,地铁站十分钟路程”

这段话中,我设置查找关键词为酒店地铁,两个关键词之间隔着“,临苏州河,”共六个中文字加标点,用Near((酒店,地铁),3)可以匹配得出,而间隔设为2则无法得出。

不过中文在使用的时候感觉还有更细节的地方,并不能完全认为是一个间隔为两个字符,此处的结论仅供参考。

最后将NEAR函数替换为CONTAINS(column_1,'text')中的text部分即可,注意替换是只替换text部分,引号要保留,要用引号将整个NEAR函数括起来,否则会报错。

关于NEAR函数用中文匹配的结论,如果有大佬有更加准确的说法,欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值