五、索引原理
5.1 倒排索引
倒排索引(Inverted Index)也叫反向索引,有反向索引必有正向索引。通俗地来讲,正向索引是通过key找value,反向索引则是通过value找key。ES底层在检索时,底层使用的就是倒排索引
ES索引可以总结为:索引区和元数据区
- 索引区:用于存放对文档分词之后的数据模型(value-_id)
- 元数据区:用于存放原始文档,一行记录(_id-record)
先去索引区,再去元数据区寻找
例子如下
映射字段
"product" : {
"mappings" : {
"properties" : {
"title" : {
"type" : "keyword"
},
"description" : {
"type" : "text"
}
}
}
}
录入的数据如下
_id | title | description |
---|---|---|
1 | 香蕉 | 我喜欢香蕉 |
2 | 苹果 | 喜欢吃苹果 |
3 | 水果 | 喜欢水果 |
在ES中,除了text类型分词,其它类型不分词,因此根据不同字段创建索引如下
- title字段
term | _id(文档id) |
---|---|
香蕉 | 1 |
苹果 | 2 |
水果 | 3 |
- description字段
term | _id | term | _id | term | _id |
---|---|---|---|---|---|
我 | 1 | 吃 | 2 | 水 | 3 |
喜 | [1:1:5,2:1:5,3:1:4] | 苹 | 2 | ||
欢 | [1:1:5,2:1:5,3:1:4] | 果 | [2:1:5,3:1:4] | ||
香 | 1 | ||||
蕉 | 1 |
[文档id:term出现次数:文档id记录的长度]