索引
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、可以分开索引,然后合并
并行索引机制
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、可以分开索引,然后合并
并行索引机制