用lucene做一个站内搜索引擎(二):一个站内搜索器的设计(1):索引器的设计

在做一个站内的搜索引擎, 仅有数据库的一些字符串匹配的函数是不够的, 往往需要从数据库(离线地)或从用户当前的输入(在线地,或短间隔地)把一条一条的数据记录(以下称为Entry)读出建索引并适时的进行优化(IndexWriter.optimize()). 上面说的也就是要做好三个工作:离线全局索引,在线索引,适时的优化索引.

在说设计之前需要先介绍一下Lucene的索引读写的特征:1) Lucene的索引写入时会对写入的速度做优化,会牺牲index的查找(读)速度, 为提高index的查找,需要进行优化(
IndexWriter.optimize ) 2) 对同一个index目录, lucene的写操作不能同进行 3) lucene的读写操作可同时进行, 但读的是"上一次写完的index"

结合lucene IndexWriter现有的特征,索引器需要做到:
1) 优化时不重建索引, 重建索引时不优化
2)
重建索引可以与 在线索引同时进行, 但是,需要做一次index的拷贝, 在拷贝上重建, 在重建过程中在线索引仍在进行, 但不能添加到当前索引目录, 应添加到一个temp index目录上. 在重建索引读完数据库后, 应当将temp index合并到重建的索引上, 合并的过程不允许在线索引进行写入. 合并完后,在线index变成重建的这个index.
3) 优化index和在线索引的关系 与 重建索引和在线索引的关系一样.

在线的写入的索引项放入一个池中, 系统的在线索引线程会定时地到池子中取出所有的东东写入索引.

系统的简单静态示意图如下:

modificationPool就是在线记录池, 定时的会被QueryIndexer写入当前索引中. reconstructDBIndex()是重建索引, 而优化这里没有体现.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值