全文索引两常问题

--在执行该脚本程序之前启动sql server的全文搜索服务,即microsoft search服务
use AMS10 --打开数据库
go
--检查pubs是否支持全文索引,如果不支持全文索引,则使用sp_fulltext_datebase打开该功能
if (select databaseproperty ('AMS10','IsFulltextEnables'))=0
execute sp_fulltext_database 'enable'

--建立全文目录FT_orderform
execute sp_fulltext_catalog 'FT_orderform','create'
--为T_orderform表建立全文索引数据元
execute sp_fulltext_table 'T_orderform','create','FT_orderform','ORDERID'
--设置全文索引列名
execute sp_fulltext_column 'T_orderform','ticketno','add'
execute sp_fulltext_column 'T_orderform','Passengers','add'
--execute sp_fulltext_column 'T_orderform','notes','add'
--建立全文索引
execute sp_fulltext_table 'T_orderform','activate'
--填充全文索引目录
execute sp_fulltext_catalog 'FT_orderform','start_full'
GO
--检查全文目录填充情况
WHILE FulltextCatalogProperty('FT_orderform','PopulateStatus')<>0
BEGIN
--如果全文目录正处于填充状态,则等待30秒后再检测一次
WAITFOR DELAY '0:0:30'
END
--全文目录填充完成后,使用全文目录检索
--查询title列或notes列中包含有database或computer字符串的图书名称
SELECT ticketno
FROM T_orderform
where contains(ticketno,'7812388833444')

SELECT  top 10 ticketno FROM T_orderform where ticketno!=''
--7812114904851|7812114904852
--CONTAINS(Name, 'Mountain');

select  passengers,* from T_orderform where contains(passengers,'takei/toshiaki')
select  passengers,* from T_orderform where contains(passengers,'*郑宝斌')

前面是建全文索引的一个实例,测试成功过的,注意要打开全文索引服务,AMS10这个是库名,T_orderform这个是表名,ticketno和Passengers这个是列名。

你会发现select passengers,* from T_orderform where contains(passengers,'*郑宝斌')
这个能不出结查,但select passengers,* from T_orderform where contains(passengers,'takei/toshiaki')可以,原因是全文索引的字符集不对,中文的查不出来

 

以下为contains一些常用的用法:

我们通过例子来学习,假设有表 students,其中的 address 是全文本检索的列。
1. 查询住址在北京的学生
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'beijing' )
remark: beijing是一个单词,要用单引号括起来。

2. 查询住址在河北省的学生
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, '"HEIBEI province"' )
remark: HEBEI province是一个词组,在单引号里还要用双引号括起来。

3. 查询住址在河北省或北京的学生
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, '"HEIBEI province" OR beijing' )
remark: 可以指定逻辑操作符(包括 AND ,AND NOT,OR )。

4. 查询有 '南京路' 字样的地址
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'nanjing NEAR road' )
remark: 上面的查询将返回包含 'nanjing road','nanjing east road','nanjing west road' 等字样的地址。
          A NEAR B,就表示条件: A 靠近 B。

5. 查询以 '湖' 开头的地址
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, '"hu*"' )
remark: 上面的查询将返回包含 'hubei','hunan' 等字样的地址。
          记住是 *,不是 %。

6. 类似加权的查询
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'ISABOUT (city weight (.8), county wright (.4))' )
remark: ISABOUT 是这种查询的关键字,weight 指定了一个介于 0~1之间的数,类似系数(我的理解)。表示不同条件有不同的侧重。

7. 单词的多态查询
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'FORMSOF (INFLECTIONAL,street)' )
remark: 查询将返回包含 'street','streets'等字样的地址。
         对于动词将返回它的不同的时态,如:dry,将返回 dry,dried,drying 等等。


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值