1. 概念
1.1 Document
定义: 可以被搜索数据的最小单位。
特性:文档会被序列化成Json格式,每个文档都有一个Uid,每个文档的id是独一无二的。
Metadata元数据:标注文档的相关信息
_index: 文档所属的索引名称
_type:文档所属类型名称
_id:文档唯一ID
_source:文档原始的json数量? ->现在项目中没有用到
_version:版本信息可以解决部分冲突问题
_score:相关性打分
截图如下:
1.2 index
定义:Index是Document的容器,是一类文档的集合
特性:index表示每个索引都有自己的mapping定义,定义包含文档的字段名和字段类型,Shard是指分片,是物理概念,Index的数据分布在Shard上
1.3 field
定义:Document中的字段,是文档中的某一个属性
2. 问题:
2.1 什么是节点?
节点的本质是一个ES实例,即一个Java进程,一台机器可以运行多个ES进程,建议一台机器运行一个ES节点。
特性:1)每个ES节点都有自己的名字,通过文件配置,或者启动时用 -E node.name = mynodename 指定。2)每个节点启动之后都会分配一个Uid,该Uid保存在data目录下。
2.2 有哪些节点?->节点是ES进程的话,ES一定有不同类型的进程
Master node, Data node, Coordinate node,冷热节点(如何理解冷热节点),机器学习节点,Cross cluster search
2.3 什么是分片?
分片用于存储数据,分为主分片和副分片。其中主分片将数据分布到集群的所有节点上,一个分片是一个运行的Lucence实例,主分片数量在创建索引是指定,后续无法修改。副分片用于解决数据高可用的问题,是主分片的拷贝,数量可以动态调整。
2.4分片分配有什么规则?
不能过大和过小,分片数量过小,后续无法增加节点进行水平扩展,单个分片数据量大,导致数据重新分配耗时。分片数量过大,会影响相关性结果打分,影响统计结果,浪费资源。
开发人员多研究使用Document与Index,运维人员多关心节点和分片(node and shard)
3. 相关API
打开Kibana,在Kibana的Dev tools中查看索引的相关信息
GET kibana_sample_data_ecommerce
得到如下结果,该结果显示索引全部信息,截图未包含所有信息
输入如下API,查看文档总数
GET kibana_sample_data_ecommerce/_count
得到结果显示共有4675条文档
.其他查看API
#这里使用的是类似于正则表示的方式查看所有以kibana开头的index
GET /_cat/indices/kibana*?v&s=index
#查看状态为绿的索引,
GET /_cat/indices?v&health=green
#按照文档个数排序
GET /_cat/indices?v&s=docs.count:desc
#查看具体的字段
GET /_cat/indices/kibana*?pri&v&h=health,index,pri,rep,docs.count,mt
#How much memory is used per index?
GET /_cat/indices?v&h=i,tm&s=tm:desc
4.python实现查看索引及索引状态等
查看index信息
from elasticsearch import Elasticsearch
es = Elasticsearch()
index_info = es.indices.get('index_name') #填入index的名称
查看文档数量
es.count(index='index_name')
链接:
问题:
1. Elasticsearch的节点可以设置为多少?为什么看到的项目里大多都是设置的单数节点?