Lucene实现在线全文检索的总结

来源:互联网 发布:it 狂人 编辑:程序博客网 时间:2024/04/28 18:52

学习Lucene已经有一段时间了,一直没有记录下学习的过程,但是在使用的过程中自己想出了一个在线全文检索的架构设计方案,好像网上没有类似的方案吧!

我就不描述那些Lucene的基本知识了

如果要实现在线全文检索,大部分学习Lucene没多久会想到下面这个方案:

   在用户发送添加或者修改请求的时候,此时同时去添加或者修改索引,这样的方案在对索引操作比较少的时候是可以应付的,但是当对索引操作较多的时候,会出现导致Java

虚拟机崩溃的情况,因为对索引的操作相对而言是比较耗内存的。

我想出的方案是如下

          假如有保存某个方法  

     

      @InedexBuild   //此处是自定义注解

       public  New save(New new)

      {

    return new;//需要将new作为返回值

      }

    

     下面是一个AOP拦截(使用后置通知)

    @AfterReturning(value="execution(* com.readBook.service.*.*(..)) && @annotation(InedexBuild   ) ",returning="param")//此处代表扫描哪些带有indexBuild这个注解的方法
public void operateIndex(LuceneIndex luceneIndex,Object param)
{
try {
//在里面保存一条需要建索引的记录到数据库表

                        TempIndex tempIndex=new TempIndex();

                      tempIndex.setOperateType(添加..)//设置操作类型代表是添加索引

                     tempIndex.setIndexId("用来标示索引的")

                       tempIndex.setType("新闻...");设置类型为新闻

                       记录一下索引字段信息如  title,content,time等等

                     最后保存这条tempInidex记录到数据库
} catch (Exception e) {
e.printStackTrace();
}

}  

      接下来采用 定时器定时去查找这张临时索引表

     临时索引表中有记录对索引的操作类型是添加还是修改还是删除等等。。。

    自己设定多久查找一次。

    每操作一条tempIndex记录就删除一条。。或者采用逻辑删除(此处的好处就是重建索引)

    我的相关设计思想就是这些了。。因为写文章写得少,所以写得不太好。。望谅解