具体 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* 的结果集