ElasticSearch基础

学前问题

  1. 什么是倒排索引?它的组成是什么?
  2. 常见的相关性算法分析有哪些?
  3. 为什么查询语句没有返回预期的文档?
  4. 常用的数据类型有哪些?text和keyword的区别是什么?
  5. ES集群是如何搭建起来的?是如何实现故障转移的?
  6. Shard具体是由什么组成的?

Elasticseatch常见术语

Document(文档)

用户存储在ES中的数据文档,数据存储的最小单元,对应数据库的记录。
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

每个文档有唯一的id标识

  • 自行制定
  • es自动生成

Document MetaData(文档元数据)
_index: 文档所在的索引名
_type: 文档所在的类型名
_id: 文档唯一ID
_uid: 组合ID, 由_type和_id组成(6.x _type不再起作用,同_id一样)
_source: 文档原始json数据,可以从这里获取每个字段的内容
_all: 整合所有字段内容到该字段,默认禁用。

Index(索引)

具有相同字段的文档列表组成(文档的集合),对应数据库的表。
索引中存储具有相同结构的文档(Document)
每个索引都有自己的mapping定义,用于定义字段名和类型
一个集群可以有多个索引,比如:
nignx日志存储的时候可以按照日期每天生成一个索引来存储

1
2
3
4
nginx-log-2019-08-20
nginx-log-2019-08-21
nginx-log-2019-08-22
nginx-log-2019-08-23

Node(节点)

一个ES的运行实例,集群的构成单元

Cluster(集群)

有一个或多个节点组成,对外提供服务

Rest API

Elasticsearch集群对外也是提供RESTful API,方便用户来进行操作。
REST : REpresentational State Transfer
URI指定资源,比如Index,Document等等。
http method指定操作类型,如get,post,put,delete等

常用的使用方式由两种:

笔者更倾向于使用后者,因为kinbana使用起来方便,美观,便于调试。

  1. Curl命令行
  2. Kinbana DevTools
    左侧小扳手就是Devtools。 红线左侧为代码编辑区。此工具有自动补全功能。
    点击绿色按钮可以执行编辑的命令。右侧为运行结果。