• lucene-利用内存中索引和多线程提高索引效率


    转载地址: http://hi.baidu.com/idoneing/item/bc1cb914521c40603e87ce4d

    1、RAMDirectory和FSDirectory对比

    RAMDirectory在内存中所进行的操作比FSDirectory在磁盘上所完成的工作要快得多。

    2、即使使用索引参数来使Lucene减少在磁盘上合并段的频率,基于FSDirectory的索引还要把它们写入磁盘,而RAMDirectory完全不用写磁盘。

    3、将RAMDirectory做为一个缓冲器实现对索引的、批处理

    1)创建一个基于FSDirectory的索引。

    FSDirectoryfsdir=FSDirectory.getDirectory("/tmp/index",true);

    2)创建一个基于RAMDirectory的索引

    RAMDirectory ramdir=new RAMDirectory();

    3)向基于RAMDirectory的索引中增加文档。

    IndexWriter ramwriter=new IndexWriter(ramdir,newSimpleAnalyzer(),true);

    IndexWriter fswriter=new IndexWriter(fsdir,newSimpleAnalyzer(),true);

    while (...){

    ...

    ramwriter.addDocument(doc);

    }

    4)不定期把缓存在RAMDirectory中的所有数据写入FSDirectory

    if (可以写入)

    {

    fswriter.addIndexes(Directory[] {ramdir});//合并数据

    ramwriter.close();

    ramwriter=newIndexWriter(ramdir,new SimpleAnalyzer(),true);

    }

    5)转到第三步

    4、并行索引多个索引文件

    可以使用多线程的索引程序,并行使用把RAMDirectory作为一个缓冲器,然后使用addIndexes合并写入

  • 相关阅读:
    spring boot 启动原理
    log4j相关配置
    JAVA多线程之volatile 与 synchronized 的比较
    Mybatis 一对一、一对多、多对多
    缓存
    spring boot 总结
    学习网站
    Kafka(一)
    hbase(二)
    Zookeeper那些事
  • 原文地址:https://www.cnblogs.com/tianjixiaoying/p/4260035.html
Copyright © 2020-2023  润新知