解决大量磁盘IO
- config.setMaxBufferedDocs(100000); 控制写入一个新的segment前内存中保存的document的
数目,设置较大的数目可以加快建索引速度。
数值越大索引速度越快, 但是会消耗更多的内存 - indexWriter.forceMerge(文档数量); 设置N个文档合并为一个段
数值越大索引速度越快, 搜索速度越慢; 值越小索引速度越慢, 搜索速度越快
更高的值意味着索引期间更低的段合并开销,但同时也意味着更慢的搜索速度,因为此时的索引通
常会包含更多的段。如果该值设置的过高,能获得更高的索引性能。但若在最后进行索引优化,那
么较低的值会带来更快的搜索速度,因为在索引操作期间程序会利用并发机制完成段合并操作。故
建议对程序分别进行高低多种值的测试,利用计算机的实际性能来告诉你最优值。
选择合适的分词器
不同的分词器分词效果不同, 所用时间也不同
虽然StandardAnalyzer切分词速度快过IKAnalyzer, 但是由于StandardAnalyzer对中文支持不好, 所
以为了追求好的分词效果, 为了追求查询时的准确率, 也只能用IKAnalyzer分词器, IKAnalyzer支持停
用词典和扩展词典, 可以通过调整两个词典中的内容, 来提升查询匹配的精度
选择合适的位置存放索引库
Directory directory = MMapDirectory.open(Paths.get("xxx"));
搜索api的选择
- 尽量使用TermQuery代替QueryParser
- 尽量避免大范围的日期查询