lucene其实并不是特别适合做交互式索引,而支持百毫秒级索引更新,在merge IO消耗/索引碎片之间权衡也是个事。
一种实现思路:
1.周期性全量更新。原因很简单,没心思仔细分析一个交互式增量做引运行一两年后是啥情况;我们数据规模也没大到不能经常(how often?)更新;靠实现merge策略来控制也麻烦,不太可控。
2.全量更新在磁盘,MMapDirectory依靠操作系统buffer加速,memory directory太大也不合适靠jvm管理,各种gc导致的延时
3.增量索引维护在memory directory,量没那么大,相对靠谱
4.MultiReader
问题似乎简单了很多,只要保证每次全量的时候打扫干净战场,可以一直运行下去(维护20g内存索引的噩梦一直挥之不去~~)