5.索引原理

66 阅读1分钟

倒排索引

倒排索引(Inverted Index) 也叫反向索引,有反向索引必有正向索引。 通俗地来讲,正向索引是通过key找valug,反向索引则是通过value找key。 ES底层在检索时底层使用的就是倒排索引。

索引模型

先有索引和映射如下:

{
"products" : {
	"mappings" : {
		"properties" : {
			"description" : {
				"type" : "text"
			},
			"price" : {
				"type": "float"
			},
			"title": {
				"type" : "keyword"
			}
		}
	}
}

先录入如下数据,有三个字段title、price、description

_idtitlepricedescription
1洗衣液25这个洗衣液很搞笑
2手机1999很好用
3小老鼠0很好吃
倒排索引的示意如下,这就是es的查询效率高的原因
title字段不分词,整块匹配
description字段分词,每个字都是一个匹配
索引区元数据区
洗衣液 11 洗衣液 25 很搞笑
25 1...
很 [1,2,3]
搞 1
笑 1
手机 2
1999 2
好 2
用 2
...

注意:Elasticsearch分别为每个字段都建立了一个倒排索引。因此查询时查询字段的term.就能知道文档ID,就能快速找到文档。 每个索引还建立了在元数据区出现的次数,出现的位置等信息,用于计算分数,按照特定顺序输出