Atitit.软件按钮与仪表盘(13)--全文索引操作--db数据库子系统mssql
全文索引操作
4.全文索引和like语句比较 1
5.倒排索引invertedindex 1
2.SQLServer全文检索 2
3.Lucene全文检索 3
一般情况,使用SQLServer中的全文索引,经过大体4个步骤: 4
Mssql的全文索引操作(attilax验证) 5
查看全文index使用大小 5
查看表行数与体积大小 6
参考 6
4.全文索引和like语句比较
当然是全文索引的执行效率高.
一般全文索引使用的是倒排索引,能够支持多关键字的索引,而LIKE只有前缀匹配时才能使用索引,否则就是全表扫描,效率当然很低
但全文索引存在填充问题,需要在增加内容后进行增量填充,否则检索不到新增的内容的。SqlServer里可采用基于更改跟踪的填充,速度飞快,几乎可以认为就是实时增量填充了.
作者::老哇的爪子Attilax艾龙,EMAIL:1466519819@
转载请注明来源:/attilax
5.倒排索引invertedindex
为什么Sqlserver全文检索和Lucune全文检索速度快呢,因为它和大多数搜索引擎一样,都使用了倒排索引invertedindex
2.SQLServer全文检索
为了提高效率,换用sqlserver的全文检索,怎么建全文检索就此略去,不提,只看查询方法.
例如:select*fromtablewherecontains(ProductDesc,'*cad*')
它查询的效率很高,支持中文分词(但好不好就另说了),但缺点竟然是在英文查询上,如果想模糊查询带cad三个字母的数据,它只能搜索出以cad为完整单词的数据,例如:它能查出abccad,caddef,或者cad,它不能查出autocad这种字母连在一起的数据,也就是说,sqlserver的全文检索的英文分词是空格,要想查连在一起的英文词,它办不到,得另寻第三方的全文索引了,ms如果在这里开个可扩展的口子多好,可惜了.
索引的更新填充问题:创建好全文检索就自动来一次完全填充,如果在跟踪更改处选择自动,全文检索就会采用基于更改跟踪的填充,原表数据一旦有改动,就会从后台悄悄地传播过来,自动的更新全文索引.具体可参考/zh-cn/library/ms142575.aspx
在更新全文索引之前这段时间,搜不到新录入但未收入全文索引的数据,但like可查到.虽然不是实时的,但是经过测试,我发现这个更新速度非常之快,几乎一改原表,全文索引就更新了,所以我觉得可以认为实时的,估计sqlserver内部应该是用观察者模式实现这个功能的.
另外,contains包含的列都必须来自同一个表,不能跨表,例如wherecontains(a.ProductDesc,b.ProductName,'*cad*'),这样是不行的.
3.Lucene全文检索
SQLserver全文检索不灵了,只能找第三方的方案了,首当其冲的就是Lucene了,但在.net下,Lucene却很不顺当.
NLucene是将Lucene从Java移植到.NET的一个SourceForge项目,它从Lucene1.2版本转化而来,但2002年就停止更新了.
因为NLucene项目到2002年就没有再推出新的版本,可Lucene却一直在发展,于是有人把Lucene1.3版移植到.NET就成了,但是发展到2.0版的时候变成了商业化的产品,脱离了开源项目,听说现在进了孵化器已停止开发了,但上官网//download.html上看,还仍然在更新中似乎没有停止,最新开源的版本是2.9.2,发布日期是5月6日,他们还在准备2.9.4版.
受到脱离开源项目的影响,有人为了继续发展开源.Net搜索引擎,于是在的原有基础上继续发展该项目,但是名字改成了DotLucene以区别于。但现在打开官网一看,得,又停止了.看来,只能用2.0这最后一个开源版本了.
索引的更新填充问题:也是要隔一段时间更新一次索引,也是不可实时更新的,需要定期更新填充才可以,如果需要频繁更新推荐删除旧的然后重建索引.
一般情况,使用SQLServer中的全文索引,经过大体4个步骤:
1).安装fulltextsearch全文索引服务;
2).为数据表建立fulltextcatalog全文索引目录;
3).进行fulltextcatalog的population操作(使全文索引与数据表内容同步);
4).使用全文索引进行查询。
Mssql的全文索引操作(attilax验证)
1.启动SQLFull-textFilterDaemonLauncher(MSSQLSERVER)服务
2.建设:::索引表格>>ritkey>>全文index>>创建fulltxt或者
Db>存储>>全文目录>新建全文目录
3..增添计划>>cpu空闲的.....
4.4.使用索引功能:
select*frommybbs_TablewhereContains(col2,'"windows"');
速度还凑火..
查看全文index使用大小
增添状态:::正在处理通知..表明目前等候插入....平常状态..
目录大小:::5g
查看表行数与体积大小
表格属性>>存储...>>>35G
参考
,SQLServer全文检索,Like模糊查询的一点心得-BobLiu-博客园.html
使用SQLServer中的全文索引_知识库_博客园.html