世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。
首先重申一下索引结构:
word - {{docId, wordCount, {pos1, pos2, pos3}}}
即:
- 每个字段对应多个文档
- 每个文档由文档id、该文档中包含的该字段数以及该字段在文档中的所有位置下标标识
那么索引的增删改是如何做的呢?
增 :
- 对要新增的文档分词
- 遍历所有分词,在索引中查找
- 如果索引中含有该分词,则为该分词字段增加新文档
- 如果索引中不含该分词,则新增分词字段并在分词字段新增对应的文档
删 :
- 对要删除的文档分词
- 遍历所有分词,在索引中查找
- 如果索引中含有该分词,则删除该分词对应的要删除的文档
改 :
- 由于每个文档包括多个分词, 所以修改操作太过繁琐,基于这个原因,es索引没有实际意义上的修改,而是在修改时删除旧的文档,然后增加新的文档
在实际操作中,我发现要批量删除文档速度时很慢的,那么在删除时我们能不能直接删除整个索引文件呢?