elasticsearch中的倒排索引
倒排索引是搜索引擎中常用的一种数据结构,适用于全文检索,能够通过文本内容高效检索到相应的文档。
一、倒排索引的基本概念
正排索引:传统的索引方式,按照文档id顺序存储文档,通过文档id找到文档对应的词。因此当需要找到包含某个词的文档时,需要遍历所有文档,不适合全文检索。
doc_1 | cat dog |
doc_2 | dog fish |
doc_3 | cat fish |
倒排索引:将文档中的每个词映射到包含该词的文档id列表,这样就可以快速找到包含某个词的所有文档。
cat | [1, 3] |
dog | [1, 2] |
fish | [2, 3] |
二、倒排索引优势
(1) 快速检索,避免全局扫描所有文档
(2)节省存储空间,倒排索引只存储词条与文档的关系,不会重复存储词条
(3)适合全文检索
三、elasticsearch中的倒排索引
elasticsearch在实际应用中,还对倒排索引做了一系列优化,以提高性能和存储效率:
(1)压缩。倒排索引中的文档列表通常会进行压缩。
(2)分片与副本。通过分片(shard)和副本(replica)提高并发性和容错性。
(3)缓存机制。es会缓存热词。