Elasticsearch倒排索引
什么是倒排索引
倒排索引(Inverted Index)是一种将文档中的每个单词映射到包含该单词的文档列表上的数据结构
倒排索引的构建过程
文档1: “我爱吃苹果”
文档2: “我爱吃香蕉”
文档3: “我喜欢苹果和香蕉”
-
文档分词:将文档中的文本内容进行切分,生成一系列的词项(tokens)。
文档1: ["我", "爱", "吃", "苹果"]
文档2: ["我", "爱", "吃", "香蕉"]
文档3: ["我", "喜欢", "苹果", "和", "香蕉"]
-
建立词项列表:为每个唯一的词项创建一个列表,记录包含该词项的文档和位置。这样就形成了一个词项-文档映射。
-
构建倒排表:创建一个包含所有词项的表,每个词项映射到其出现的文档ID及在文档中的位置。最终的结构类似于:
-
"我" -> [doc1, doc2, doc3] "爱" -> [doc1, doc2] "吃" -> [doc1, doc2] "苹果" -> [doc1, doc3] "香蕉" -> [doc2, doc3] "喜欢" -> [doc3] "和" -> [doc3]
-
查询过程
当用户进行搜索时,例如查询“苹果”,Elasticsearch会查找倒排索引,找到与“苹果”相关的文档列表(在本例中为doc1和doc3),并根据相关性(可能还会计算TF-IDF、BM25等评分模型)返回结果。
优化与扩展
-
压缩:由于倒排索引可能会占用大量存储空间,通常会对其进行压缩以减少存储成本。
-
分片和副本:为了提高并发访问能力和故障恢复,Elasticsearch允许把倒排索引分为多个分片(shard)和副本(replica),从而分散数据存储和请求处理的压力。