栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

用Lucene打造站内搜的思路

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用Lucene打造站内搜的思路

1.为什么要用Lucene,而不用直接从数据库里搜索记录?
主要是考虑到几个因素:(1)性能问题,Lucene是基于文件索引的搜索机制,性能要比数据库里检索更快,特别是数据量大的时候两者区别比较明显。数据库用Select检索时,默认在执行sql语句时,会对表锁定,直到查询完成;(2)目前很多网站,都已经将页面静态化,这种情况下,直接用生成的文件编制索引,再利用Lucene来检索,可以不用查询数据库,减轻了数据库的压力;(3)Lucene可以更方便的进行分词,支持多个关键字检查等操作,在实现上要比Sql方便;(4)直接基于文件系统的检索,不会有SQL注入风险

2.创建索引
基本上有二种思路,适用于不同的情况
(1)如果网站本身就是静态化的,可以直接读取静态Html文件,来创建索引。注意:如果要实现特定标签的搜索(比如要按产品价格,产品编号,产品摘要,发布时间等精确搜索产品信息),在读取文件内容时,需要利用正则表达式对Html文件进行匹配分析,得到各个标签的值,再创建Field,加入document,最后调用IndexWriter的相应方法创建索引
(2)也可以直接从数据库里查询各标签的值,再按(1)的方法,生成Field-->document-->加入IndexWriter

3.索引的维护
显然,不可能每次查询都全部将索引生成一次,这里的索引维护主要是索引更新和索引删除,也有两种思路:
(1)找个访问比较少的时段,比如每天晚上0点,做一个C/S程序放在服务器上,用定时器或计划任务全部重新生成索引
(2)更合理有效的方式,是当信息发生修改或删除时,索引维护程序能得到通知,仅更新特定信息的索引就可以了。这里建议用消息队列机制,网站上有信息发生增,删,改时,将唯一标识值,发送到消息队列,然后索引维护程序监听消息队列,一有消息了,马上根据唯一标识,到数据库里取出修改的信息(或读取修改过的Html文件),更新指定索引即可

4.分词问题
国内有一些公开的分词组件,可以直接利用,当然有一些是商业化的,要真正好用的,得花一点钱,呵呵   

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/233609.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号