1.同一个索引目录,IndexWriter和IndexReader确保要唯一,他们两个都是线程安全的,可以被多个线程调用。 让专门的类去管理(实例化和销毁)IndexWriter和IndexReader。
2.尽量减少不必要的储存,只储存哪些要在返回结果里的字段,不需要检索的内容就不要建索引。索引太大了,对更新索引的效率都会有影响。
3.不要强制kill建索引的程序,强制kill很有可能导致索引坏掉,每次关闭前必须保证所有的IndexWriter已经正常的关闭。
4.读先都很频繁的情况下, IndexReader.reopen产生新的IndexReader实例 ,需要关闭旧的实例。关闭的IndexReader才能让它释放文件。否则会导致打开文件过多的异常
5.如果要做读写分离。同步索引数据要按如下步骤进行:a.停止所有建索引的程序。b.IndexWriter.commit() c.优化所有索引 d。最后再coping or rsyncing。
6.排序字段和范围字段的格式处理,排序字段需要补零等操作。范围字段尽量使集合最小化。比如:要按时间来范围搜索,如果只需要精确到天。那就把字段格式成(yyyyMMdd) 形式,只需要精确到月,格式成(yyyyMM)。如果某个字段即要排序就要范围搜索,应该考虑把索引成两个字段。
7.每个Document最好都分配一个唯一key,这个key可以是数据库里每个唯一键,也可以是多个字段的组合。用于更新和删除索引
8.把需要更新很频繁的索引和更新不频繁的索引分离成两个目录(要有良好、严密的方案)
2.尽量减少不必要的储存,只储存哪些要在返回结果里的字段,不需要检索的内容就不要建索引。索引太大了,对更新索引的效率都会有影响。
3.不要强制kill建索引的程序,强制kill很有可能导致索引坏掉,每次关闭前必须保证所有的IndexWriter已经正常的关闭。
4.读先都很频繁的情况下, IndexReader.reopen产生新的IndexReader实例 ,需要关闭旧的实例。关闭的IndexReader才能让它释放文件。否则会导致打开文件过多的异常
5.如果要做读写分离。同步索引数据要按如下步骤进行:a.停止所有建索引的程序。b.IndexWriter.commit() c.优化所有索引 d。最后再coping or rsyncing。
6.排序字段和范围字段的格式处理,排序字段需要补零等操作。范围字段尽量使集合最小化。比如:要按时间来范围搜索,如果只需要精确到天。那就把字段格式成(yyyyMMdd) 形式,只需要精确到月,格式成(yyyyMM)。如果某个字段即要排序就要范围搜索,应该考虑把索引成两个字段。
7.每个Document最好都分配一个唯一key,这个key可以是数据库里每个唯一键,也可以是多个字段的组合。用于更新和删除索引
8.把需要更新很频繁的索引和更新不频繁的索引分离成两个目录(要有良好、严密的方案)
本文提供了一系列针对Lucene索引优化的建议,包括合理管理IndexWriter和IndexReader、减少不必要的存储、正确关闭IndexWriter、读写分离的最佳实践、字段格式处理技巧、使用唯一Key标识文档、以及如何分离更新频繁的索引。
&spm=1001.2101.3001.5002&articleId=83403740&d=1&t=3&u=a630b870179446d68bd3d4504fe03670)
1103

被折叠的 条评论
为什么被折叠?



