SQL Server - 小鸟系列之全文搜索

全文索引支持的数据类型包括CHAR, VARCHAR, NCHAR, NVARCHAR,TEXT, NTEXT, IMAGE, XML, and VARBINARY(MAX)

首先创建一张表:

CREATE TABLE [dbo].[Docs](
	[Id] [int] IDENTITY(1,1) NOT NULL Primary Key,
	[Title] [varchar](200) NULL,
        [Content] [varchar](3000) NULL,  --对该列进行全文搜索
	[createdate] [datetime] NULL Default Getdate()
) 

然后自己插入一下数据进去...

一:配置全文搜索列,如下图:




这里选择需要全文搜索的列,和语言(我这里选择的是简体中文),接下来可以设置默认。

二:实现全文搜索

  Select * From Docs With(Nolock) Where Contains(Content,'考试')


同义词

如果我们想查询 "测试" 也同样能查询出 “考试” 的结果,这时候我们就可以设置同义词了。

同义词目录:

MSSQL10_50.MSSQLSERVER\MSSQL\FTDATA\  (在你电脑SQL Server安装目录下)

里面有很多xml文件,找到tschs.xml,因为这个文件是对应中文,不同语言对应不同文件,修改如下:

<XML ID="Microsoft Search Thesaurus">
    
    <thesaurus xmlns="x-schema:tsSchema.xml">
	<diacritics_sensitive>0</diacritics_sensitive>
        <expansion>
            <sub>考试</sub>
			<sub>测试</sub>
        </expansion>
    </thesaurus>

</XML>

这是 考试测试就表示的是同一个意思。

执行语句:

exec sys.sp_fulltext_load_thesaurus_file 2052  --2052表示中文(修改完文件之后都要执行下这条语句才能生效)
SELECT * FROM sys.fulltext_languages --查看各语言对应的ID值

SELECT * FROM [Docs] WHERE CONTAINS(CONTENT,'FORMSOF(THESAURUS,考试)')
SELECT * FROM [Docs] WHERE CONTAINS(CONTENT,'FORMSOF(THESAURUS,测试)')

 
 

这样上面两条语句返回结果一样(使用关键字FORMSOF

同义词替换

<XML ID="Microsoft Search Thesaurus">

    <thesaurus xmlns="x-schema:tsSchema.xml">
	<diacritics_sensitive>0</diacritics_sensitive>
        <replacement>
            <pat>检测</pat>
            <sub>成绩</sub>
            <sub>考试</sub>
        </replacement>
    </thesaurus>

</XML>
这时候查询 检测就等同于查询 成绩考试,不会查询检测

断字符

全文搜索列会自动断字,断成若干个有意义的词,比如:

SELECT * FROM sys.dm_fts_parser(N'考试的时候还在发烧', 2052, 0, 1);

这时候我们看到这句话被断字成很多有意义的词了,所以我们查询 考试可以查询到结果,但是我们如果查询 试的,则不会查询到结果,不信你可以试试

干扰词

有些干扰词(noise words)无益于查询,所以需要屏蔽某些词,查看干扰词:

Select * From  sys.fulltext_system_stopwords
三:FREETEXT

先来个例子:

SELECT * FROM [Docs] WHERE FREETEXT (CONTENT,'我们去考试吧')
虽然我们表内没有 我们去考试吧这句话,但是依然可以查询出结果,因为这句话里包含 考试
FREETEXT查询的范围更加广泛,不精准。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值