Hubble.net 持久化方面3个重大改进
Author:Eaglet
1.持久的DocId
Hubble.net 采用的持久的 DocId,即DocId 永远不会改变,而 lucene.net 的 DocId 是动态的。这导致Lucene无法用DocId 做主键和别的数据进行整合 所以Lucene 的全文内容和全文索引必须要建在一起,不能单独只建索引,而通过DocId从其他的存储组件(如数据库中)获取全文内容。系统整合能力不够灵活。
2. 元数据快速修改
元数据(如一些价格,时间的数据)和全文在同一记录中,在构建垂直搜索中,全文往往很少改动,但元数据则可能经常变动。Lucene.net 如果要修改元数据,必须将整条记录删除,然后重新再添加,这样需要将大量的全文重新分词并存储,效率低下。 而Hubble.net 将元数据单独进行存储,修改元数据不需要删除记录重新添加,而是只修改对应记录的元数据就可以了。不影响全文索引。
3. 高效的增量索引
Lucene每增量一次就会生成至少一个Segment,增量完后,为保证查询效率,需要优化,这导致哪怕很小的增量,都要优化一次。如果数据量很大,极端情况下,只增加一条记录,就要重新对上百万的记录重新整理一次,极其耗时。Hubble.net 进行了改进,优化时尽量避免整理大的索引文件,大大提高了增量索引时优化的效率。