Lucene搜索优化技巧 - 索引篇

索引
    1、t.termText()替换为new String(t.termBuffer(),0,t.termLength())
    2、StringReader 和TokenStream对象都需要close
    3、索引时Document只用一个、Field只用几个
        一个Document对象对应多个Field实例
        Field有新的setValue方法,动态改变属性
        不能只有一个Field实例
            例如:idField, bodyField
        必须等Document都到索引中之后,才可以重新设置值
    4、索引中Field的命名只使用2个字符表示
    5、有些索引字段可以考虑使用0,1替代字符串,排序采用整数来排
    6、减少索引的存储字段,一般只存ID
    7、索引的时候只用一个IndexWriter对象
    8、3.1版本有个新的方法writer.ramSizeInBytes()
        根据RAM的使用情况,来决定是不需要刷新到磁盘。
        之前:setMaxBufferedDocs
    9、批量索引的时候,尽可能多使用一些内存,采用非复合的文件方式,完成后集中优化合并索引文件
        fsWriter.addIndexesNoOptimize
        fsWriter.setUseCompoundFile(false);
        需要注意不要超过系统的允许打开文件数
    10、重复使用单一的Token实例,在analyzer中。
    11、Turn off auto-commit if there are stored fields and term vectors
        设置autoCommit=false,直到writer close之后才会生效
        默认是true
    12、如果总是同时在多个分词的字段中查询,可以考虑将多个Field合并到一个Field中
    13、增加mergeFactor,但是不要太大
        反复调试获取经验值
    14、关闭一些实际上没用的功能(不要存储一些不必要的字段,尽量不要打开term vectors)
    15、使用更快的analyzer
    16、加快获得document数据的速度
        比如:从数据库、文件获取数据的速度
    17、索引的时候可以考虑使用多线程
        使用多线程addDocuments
        需要测试,然后确定线程数
    18、可以分开索引,然后合并
        并行索引机制

你可能感兴趣的:(多线程,Lucene)