一、Document
1、相当于JSON Object,由字段(Field)组成,常见数据类型如下:
- 字符串:text、keyword
- 数值型:long、integer、short、byte、double、float、half_float、scaled_float
- 布尔型:boolean
- 日期型:date
- 二进制:binary
- 范围类型:integer_range、float_range、long_range、double_range、date_range
2、元数据,用于标注文档的相关信息
- _index:文档所在的索引名
- _type:文档所在的类型名
- _id:文档唯一id,可自行指定,如不指定,则自动生成(Strings.base64UUID())
- _uid:组合id,由 _id 和 _type组成(6.x _type不再起作用,同 _id 一样)
- _source:文档的原始json 数据
- _all:整合所有字段内容到该字段,默认禁用
二、倒排索引
1、介绍
- 单词到文档id 的关系。
- 倒排索引是搜索引擎的核心,主要包含2部分:单词词典和倒排列表
2、单词词典
- 记录所有文档的单词,一般比较大
- 记录单词到倒排列表的关联信息
- 单词字典的一般实现是 B+ Tree
3、倒排列表(position list)
- 倒排列表记录了单词对应的文档集合,由倒排索引项组成
- 倒排索引项 主要包含如下信息:
-
- 文档id,用于获取原始信息
- 单词频率(TF, term frequency),记录该单词在文档中出现的次数,用于后续相关性算分
- 位置(position),记录单词在文档中的分词位置,用于做词语搜索
- 偏移(offset),记录单词在文档的开始和结束位置,用于做高亮显示
举例:
注:
es存储的是一个json格式的文档,其中包含多个字段,每个字段都会有自己的倒排索引。
文档如下:
{
"name": "haha",
"job": "java"
}
此时,es会有2个倒排索引,一个是 name 倒排索引,一个是 job 倒排索引。