注: 部分概念介绍来源于网络
_index:文档存放在哪
_type:文档表示的对象类别
_id:文档唯一标识
_version:文档的版本号。当每次对文档进行修改时(包括删除),_version 的值会递增。
_found:GET 请求的响应体包括 {"found": true} ,这证实了文档已经被找到。 如果我们请求一个不存在的文档,我们仍旧会得到一个 JSON 响应体,但是 found 将会是 false 。 此外, HTTP 响应码将会是 404 Not Found ,而不是 200 OK 。
pretty:在请求的查询串参数中加上 pretty 参数,该功能使得 JSON 响应体更加可读。
created:标志设置成 false ,是因为相同的索引、类型和 ID 的文档已经存在
order:优先级数字越低,越早使用,如果同时匹配到两个模板,数字低的先使用,数字高的会覆盖低的。
template:将这个模板应用于所有以 xxxxx 为起始的索引。
settings:指定index的配置信息, 比如分片数、副本数, tranlog同步条件、refresh 策略、写入flush时间间隔等信息。
mappings:字段映射,指定index的内部构建信息, 主要有:
① _all: All Field字段, 如果开启, _all字段就会把所有字段的内容都包含进来,检索的时候可以不用指定字段查询 —— 会检索多个字段, 设置方式: "_all": {"enabled": true};在ES 6.0开始, _all字段被禁用了, 作为替换, 可以通过copy_to自定义实现all字段的功能.
② _source: Source Field字段, ES为每个文档都保存一份源数据, 如果不开启, 也就是"_source": {"enabled": false}, 查询的时候就只会返回文档的ID, 其他的文档内容需要通过Fields字段到索引中再次获取, 效率很低. 但若开启, 索引的体积会更大, 此时就可以通过Compress进行压缩, 并通过inclueds、excludes等方式在field上进行限制 —— 指定义允许哪些字段存储到_source中, 哪些不存储;
③ properties: 最重要的配置, 是对索引结构和文档字段的设置.
aliases:别名
number_of_shards:分片数
number_of_replicas:备份数
health:当前健康状态
status:开启/关闭(open/close)状态
index:索引名称
uuid:索引 uuid
pri:主分片数目
rep:副本分片数目
docs.count:可用的文档数目
docs.deleted:已删除的文档数目
store.size:主分片和副本分片的存储文档空间大小
pri.store.size:主分片的存储文档空间大小
建议:
1)一个index中不能有多个type,Elasticsearch 6.X版本中已经不支持在同一个index下创建多个type,6.X之前的版本中, 父子文档的实现是一个索引中定义多个type, 6.X中实现方式改变为join方式,如果在同一个index下创建多个type, 会报出错误信息
2)设置_source = false
如果我们只关心查询的评分结果, 而不用查看原始文档的内容, 就设置"_source": {"enabled": false},这能节省磁盘空间并减少磁盘IO上的开销,我们可以把原始的数据存储在MySQL、HBase等数据库, 从ES中得到文档的ID之后, 再到相应的数据库中获取数据.
3)设置_all = false
如果能够确切地知道要对哪个field做查询操作, 就设置"_all": {"enabled": false},这能实现性能提升, 并节省存储空间,而在6.X版本开始, _all字段也不再支持了, ES官方建议我们通过copy_to自定义我们自己的all字段.
4)设置dynamic = strict
如果我们的数据是结构化数据, 就设置"dynamic": "strict",把动态类型判断设置为严格, 也就是不允许ES为插入的数据进行动态类型设置, 避免注入脏数据.
5)使用keyword类型
如果我们只关心精确匹配, 就设置test_field: {"type": "keyword"},keyword类型要比text类型的性能更高, 并且还能节省磁盘的存储空间。
index.translog.durability 有两个参数,request和async,
fsync:对应系统级别的中的direct I/O,对直接写入到磁盘中,不经过page cache
async:对应系统级别的buffer I/O,会写到page cache,在{index.translog.sync_interval}时间以后会把page cache中的内容再写入到磁盘。比fsync快,但是在index.translog.sync_interval期间机器宕机的话,这些数据没写入到磁盘中,会丢失。
_seq_no:Shard级别严格递增的顺序号,保证后写入文档的_seq_no大于先写入文档的_seq_no
_primary_term:主分片发生重分配时递增1,主要用来恢复数据时处理当多个文档的_seq_no一样时的冲突
_score:相关性评分,在进行文档搜索时,根据该结果与搜索关键词的相关性进行评分
_source:文档的原始JSON数据