Elasticsearch是高度可伸缩的开源全文搜索和分析引擎。它允许我们快速实时地存储、搜索、分析大数据。Elasticsearch是一个接近实时的搜索平台,对大数据量的处理我们通过搭建ES集群来完成。
1,集群的几个概念
主节点
服务器只作为一个主节点,但不存储任何索引数据,主节点负责创建索引、删除索引、分配分片、追踪集群中的节点状态等工作。一个节点启动后,就会使用Zen Discovery机制去寻找集群中的其他节点,并与之建立连接。集群中会从候选主节点中选举出一个主节点,为了防止脑裂现象, 防止某些主节点自成一个集群, 主节点的个数最好是奇数个,并且不少于3个;
候选主节点的设置方法是设置node.mater为true; 随着集群的扩大,一般设置专用的候选主节点,不在和数据节点复用node.data = false。
数据节点
数据节点负责索引数据的存储和相关具体操作,比如CRUD、搜索、聚合。数据节点对机器配置要求比较高,首先需要有足够的磁盘空间来存储数据,其次数据操作对系统CPU、Memory和IO的性能消耗都很大。通常随着集群的扩大,需要增加更多的数据节点来提高可用性。可通过配置node.master = false,node.data = true来实现
协调节点
专用的协调节点
该node服务器即不会被选作主节点,也不会存储任何索引数据。该服务器主要用 于查询负载均衡。在查询的时候,通常会涉及到从多个node服务器上查询数据,并请 求分发到多个指定的node服务器,并对各个node服务器返回的结果进行一个汇总处理,最终返回给客户端,可通过配置node.master = false;node.data = false来实现
2,常用工具
elasticsearch-head
是用于监控 Elasticsearch 状态的客户端插件,包括数据可视化、执行增删改查操作等,最简单的安装:
地址:https://chrome.google.com/websto … floofpjologoblkegm/
下载后解压 拖到浏览器完成安装
连接输入框中输入es集群中任意一个节点的9200地址,例如:http://192.168.1.2:9200/点击连接即可使用
Kibana
Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作。您可以使用 Kibana 对 Elasticsearch 索引中的数据进行搜索、查看、交互操作。您可以很方便的利用图表、表格及地图对数据进行多元化的分析和呈现。
Kibana 可以使大数据通俗易懂。它很简单,基于浏览器的界面便于您快速创建和分享动态数据仪表板来追踪 Elasticsearch 的实时数据变化。
搭建 Kibana 非常简单。您可以分分钟完成 Kibana 的安装并开始探索 Elasticsearch 的索引数据 — 没有代码、不需要额外的基础设施,安装过程自己搜索一下。
3,基本概念和数据结构
Indices(索引) -> Types(类型) -> Documents(文档) -> Fields(域/字段)
字段核心数据类型
字符串类型
text:全文检索需要分词的类型。
keyword:精确值。合适分组排序。不进行分词,只能通过精确值搜索到,支持模糊、精确查询,支持聚合等。
数字类型
long, integer, short, byte, double, float, half_float, scaled_float
日期类型
date
布尔类型
boolean
true 和 false
二进制类型
binary
范围类型
integer_range, float_range, long_range, double_range, date_range
复杂数据类型 Complex datatypes
数组类型
Array support does not require a dedicated type
数组支持不需要专用类型
对象类型
object for single JSON objects
单个JSON对象的对象
嵌套类型
nested for arrays of JSON objects
4, RESTful API
下面我们通过Dev Tools来总结下Elasticsearch的RESTful API一些很使用的操作:
创建索引
number_of_shards 分片数
number_of_replicas 副本数
PUT /index_1
{
“settings”:{
“number_of_shards”:5,
“number_of_replicas”:0
},
“mappings”:{
“properties”:{
“name”:{“type”:”text”},
“city”:{“type”:”keyword”},
“age”: {“type”:”integer”}
}
}
}
成功返回:
{
“acknowledged” : true,
“shards_acknowledged” : true,
“index” : “index_1”
}
获得index的setting和mapping
GET /index_1/_settings
GET /index_1/_mapping
增加docment:
PUT /index_1/_doc/1
{
“name” : “zhangsan”,
“city” : [“北京”,”西安”],
“age”: 15
}
PUT /index_1/_doc/2
{
“name” : “zhangsan”,
“city” : [“上海”],
“age”: 15
}
修改docment
修改年龄为25岁,其他字段被覆盖
PUT /index_1/_doc/1
{
“age”: 25
}
修改年龄为25岁,其他不变
POST /index_1/_update/1
{“doc”:{“age”: 15}}
删除某条docment
DELETE /index_1/_doc/3
多条件AND查询
GET /index_1/_search
{
“query”: {
“bool”: {
“must”: [
{“terms”: {“city”: [“北京”]}},
{“term”: {“age”:15}}
]
}
}
}
分组求count
默认10条,这里我们设置其返回100条
GET /index_1/_search
{
“size”: 0,
“aggs”: {
“group_by_countrys”: {
“terms”: {
“field”: “city”,
“size”:100
}
}
}
}
查询结果求count
OR is spelled should
AND is spelled must
NOR is spelled should_not
GET /index_1/_count
{
“query”: {
“bool”: {
“should”: [
{“terms”: {“city”: [“北京”]}},
{“term”: {“age”:15}}
]
}
}
}
删除索引
DELETE /index_1 |
|