SQL Server 全文索引

一、创建全文索引

1、使用SSMS

173406804.png


173423486.png


173444376.png


173459939.png


173513632.png


173530500.png


173544786.png


173557916.png


173612747.png


2、使用T-SQL

Create FullText Index On Production.ProductDescription (Description) Key Index
PK_ProductDescription_ProductDescriptionID On AWCatalog With Change_Tracking Auto;


二、填充全文索引

1、使用SSMS

174525957.png

174548194.png

2、使用T-SQL

Alter FullText Index On Production.ProductDescription Start Full Population;


三、查询

1、FreeText函数

Select ProductDescriptionID, Description From Production.ProductDescription
Where FreeText(Description, N'bike');


2、FreeTextTable函数

select * from  FreeTextTable(Production.ProductDescription, Description, N'bike')

上述查询仅返两个列:Key、Rank 。

通常使用下述查询:

Select PD.ProductDescriptionID, PD.Description, KeyTable.[Key], KeyTable.Rank
from Production.ProductDescription As PD
Inner Join FreeTextTable (Production.ProductDescription, Description, N'bike')
As KeyTable On PD.ProductDescriptionID = KeyTable.[Key];


3、Contains函数
-- 查询完全匹配“bike”的所有行:
Select ProductDescriptionID, Description From Production.ProductDescription
Where Contains(Description, N'bike');

-- 查询完全匹配“bike”的行和包含“bike”前缀的所有词的行:
Select ProductDescriptionID, Description From Production.ProductDescription
Where Contains(Description, N'"bike*"');


-- 关键词Formsof、Inflectional、Thesaurus允许搜索项的变形匹配

-- Inflectional会使搜索处理搜索中的词干,例如,“drive”与“drove”、“driven”、“driving”匹配
Select ProductDescriptionID, Description From Production.ProductDescription
Where Contains(Description, N' FORMSOF (INFLECTIONAL,ride) ');


-- Thesaurus会匹配同义词,例如,“metal”会匹配“gold”、“aluminum”、“steel”等
Select ProductDescriptionID, Description From Production.ProductDescription
Where Contains(Description, N' FORMSOF (Thesaurus,metal) ');


注意:所有的词表文件安装时都为空。要使用词表匹配,必须填充这些文件。所有词表文件都是XML文件,位于默认的SQL Server安装路径下的FTDATA文件夹。


-- near可以搜索多个关键词(邻近词)
Select ProductDescriptionID, Description From Production.ProductDescription
Where Contains(Description, N'mountain Near bike ');


-- 还可以给特殊的搜索选项指派相对权重
Select ProductDescriptionID, Description From Production.ProductDescription
Where Contains(Description, 'ISABOUT (mountain weight (.8), bike weight (.2) ) ');


4、ContainsTable函数
ContainsTable函数与Contains函数的功能一样。然而,像FreeTextTable一样,它返回行集值(其中包含RANK和KEY列),这两列可以用来返回最匹配的项。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值