sqlserver 全文索引 查询使用规则

具体 sqlserver 建立 全文索引 百度一下 很多 这里 补缀描述(要选择好语言环境)

CONTAINS  and FREETEXT 

区别:

SELECT id, name FROM Teacher
WHERE CONTAINS(note, 'heard')

SELECT id, name FROM Teacher
WHERE FREETEXT(note, 'heard')

这两个结果集 的区别 第一个 出来 0 条 第二个出来2条

原因是  FREETEXT 相较于 CONTAINS 比较松散 可以 查出 'hearder' 

咋一看来 感觉FREETEXT 比 CONTAINS  比起来 更灵活好用 其实不然 

CONTAINS  的高级用法

  • 对多列进行匹配
  • 与或非逻辑
  • 模糊匹配 支持 英文单词的变形
  • 通配符
  • 查询权重

以下的例子 都是从 sqlserver 官方文档 获取的

--多列查询
SELECT Name, ListPrice  
FROM Production.Product  
WHERE ListPrice = 80.99  
   AND CONTAINS((Name,title), 'Mountain');  
--column_list指定以逗号分隔的两个或更多个列。 column_list 必须用括号括起来。 除非指定 
--language_term,否则 column_list 中所有列的语言必须相同。
--------------------------------------------------------------------------------------
-- 与或非 逻辑
SELECT Name, ListPrice  
FROM Production.Product  
WHERE ListPrice = 80.99  
   AND CONTAINS(Name, '"Mountain" AND "WENJIE"'); 
--<AND> ::={ AND | & }  
--<AND NOT> ::={ AND NOT | &! }  
--<OR> ::=   { OR | | } 
--------------------------------------------------------------------------------------
-- 模糊匹配 支持 英文单词变形 类似于 FREETEXT
-- 可以读出ride 的各种形式(如 riding 和 ridden 等)
 SELECT Description  
FROM Production.ProductDescription  
WHERE CONTAINS(Description, ' FORMSOF (INFLECTIONAL, ride) ')

--------------------------------------------------------------------------------------
-- 通配符*的使用
SELECT Name  
FROM Production.Product  
WHERE CONTAINS(Name, ' "Chain*" ');  
--------------------------------------------------------------------------------------
--查询权重
SELECT Description  
FROM Production.ProductDescription  
WHERE CONTAINS(Description, 'ISABOUT (performance weight (.8),   
comfortable weight (.4), smooth weight (.2) )' );  
---------------------------------------------------------------------------------------
-- NEAR 使用 
-- 以下示例在 Production.ProductReview 表中搜索包含 bike 一词、在“control”词的 10 个词范围内且使用指定顺序(即,“bike”排在“control”前面)的所有注释。
SELECT Comments  
FROM Production.ProductReview  
WHERE CONTAINS(Comments , 'NEAR((bike,control), 10, TRUE)');  

注意以上的 所以 可以 混合使用 

比如我这里的sql

SELECT * FROM sku_price WHERE 
CONTAINS(sku_desc, 'ISABOUT("PJ" weight (.8) ,"PJ*" weight (.2)) AND ISABOUT("PA" weight (.8) ,"PA*" weight (.2))')

--查询 sku_price 中 匹配 PJ 或者 PJ* 但是 PJ 的权重大于 PJ* 的结果集

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值