一、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 倒排索引。