Elasticsearch关键术语 系列博文 目的只用来了解概念 ; 其中 涉及到的配置和使用 是为了方便日后使用时查询的
Index索引
概念
名词 就是一个表 存了一类文档
从数据库的角度 ES的一个index索引就是一个表 (数据库常说 查一下这个表的数据 ES叫做查一下这个index索引的数据)
其他含义
名词
一个Btree索引 一个倒排索引 也叫索引
动词
给ES数据库插入一条Document文档数据的过程 也叫索引
从ES数据库查询数据的过程 也叫索引
创建一个倒排索引的过程 也叫索引
命名规则
小写字母 + 数字
相关信息(mappings 和 settings)
index的mappings映射
概念
每个索引都有自己的映射 用于对每个字段进行设置
作用
建立映射 按最优规则处理数据 - 最大提升性能
( mappings会将JSON文档映射成Lucene的扁平格式)
字段的设置项
- 字段名
- 字段类型
# 作用 : 文本类型 index时会分词 (index是指插入数据时) "type":"text"
# 作用 : 搜索时 用suggest即可获得自动补全建议 "type":"completion"
- 字段是否建倒排索引 – 默认建
# 设置为不建倒排索引 "index":false
- 本字段用于索引的分词器
# 英文分词器 "analyzer":"english"
- 本字段用于搜索的分词器
# 英文分词器 "search_analyzer":"english"
- 本字段是否识别date类型 – 默认不
# 设置识别 "date_detection":true
- 本字段是否识别数字类型 – 默认不
# 设置识别 "numeric_detection":true
配置mapping的三种方式
方式一 ES自动生成动态映射 Dynamic Mappings 默认
作用
写入文档时 索引没有mappings会自动创建 无需手动定义mappings ES会自动推算数据类型
缺点
地理位置信息会推算成text 导致地理位置功能无法正常运行 及 Range查询无法工作
设置是默认的 不足够支持大多数需求 很多index和search都需要特定的设置
自动识别类型的机制
-
日期字符串 – Date
-
数字字符串 – text
-
其他字符串 – text 并增加keyword子字段
-
(keyword 作用 : keyword不分词 存储的是原数据)
示例 : text类型字段在index时 默认被standard分词 大写字母的字段值都存为了小写 用term精确查询时 输入大写字谜的字段值 是查不到的 ; 所以将分词前的带大写字母的字段值存入了字段名.keyword keyword不分词 存储的是原数据 term查询时 用字段名.keyword 和 带大写字母的字段值去匹配 可查到
-
-
布尔值 – boolean
-
浮点数 – float
-
整数 – long
-
对象 – object
-
数组 – 第一个非空数值的类型
-
空值 – 忽略
测试自动识别类型的机制
示例0 : 新增文档 查看自动生成的Mapping
# 新增文档
PUT mapping_test/_doc/1
{
"firstName":"Chan",
"lastName":"Jackie",
"loginDate":"2018-07-24T10:29:48.103Z"
}
# 查看这个索引的mapping
GET mapping_test/_mapping
示例1 : 新增文档 查看自动生成的Mapping
# 删除索引
DELETE mapping_test
# 新增文档
PUT mapping_test/_doc/1
{
"uid":"123",
"isVip":false,
"isAdmin":"true",
"age":19,
"heigh":180
}
# 查看这个索引的mapping
GET mapping_test/_mapping
方式二 创建索引时设置 后插入数据
作用
先创建index设置mappin