Elasticsearch-初步使用ES

ES安装

首先先去官网下载,我使用的ELK中EK都是7.12.0版本的且都是window,后续会更改成centos docker的,前期为了尽快入门,所以才使用windows。
elastic官网
下载压缩包并进行解压,执行bin目录下的elasticsearch.bat即可。(前提是你需要具备jdk1.8和node的环境, es需要jdk1.8,node为es-head和kibana需要)。
至于kibana不再这里过多叙述了,可见我kibana文章配置一下即可。

在这里插入图片描述
进入到这个页面说明已经安装完成。

官网基础命令学习

学习一个新技术最好的方式就是拜读官网文档。不过对于英语不好的同学比较困难,可以去搜索中文版的。
备注: 本文只是为了方便学习命令,对于es概念不明确的同学,还是要去学习一下,否则很容易不知道索引,文档,映射等知识点。
首先第一步
创建索引

PUT /customer?pretty

执行这个命令就会创建一个名为customer的索引,有的同学可能问pretty什么意思?为什么要加这个?
这个参数只是为了方便看返回值结构,官网说,这个参数调用是为了把返回值打印成json格式。接下来的命令我就不在过多叙述这个pretty 了。
在这里插入图片描述
执行成功,返回值是这个样子的,其中acknowledged字段表示执行成功!

删除索引

DELETE /customer?pretty

在这里插入图片描述
创建文档

PUT /customer/doc/1?pretty
{"name": "test"}

这个命令是在customer索引下创建一个文档,文档_id为1,body里就是文档的内容。
在这里插入图片描述
解释一下这些属性:
前5个我觉得比较简单,一看就知道什么意思,就是索引customer的文档,_id为1,版本1,执行的是创建操作;_shards代表的分片,说有两个分片,执行成功一个,失败0个,有的同学会问还有一个去哪里了?因为写入操作只会有一个分片相应进行执行,不会全部都执行。
seq_no:严格递增的顺序号,每个文档一个,Shard级别严格递增,保证后写入的Doc的_seq_no大于先写入的Doc的_seq_no。
_primary_term:_primary_term也和_seq_no一样是一个整数,每当Primary Shard发生重新分配时,比如重启,Primary选举等,_primary_term会递增1。

_primary_term主要是用来恢复数据时处理当多个文档的_seq_no一样时的冲突,比如当一个shard宕机了,raplica需要用到最新的数据,就会根据_primary_term和_seq_no这两个值来拿到最新的document。

查询文档

GET /customer/doc/1?pretty

在这里插入图片描述
_source字段专门用来存储返回数据的。

更新文档

POST /customer/doc/1/_update?pretty
{"doc": {"name":"Jane Doe"}}

备注: es是没有物理修改和删除功能的。对于修改官网的说法是:es删除旧文档然后在该索引下创建新文档并应用更新。删除的话,es中有个.del的文件,只要是删除操作就会将该文档标记为删除状态,在搜索的时候其实也是可以搜索到的,只不过es过滤了一下所以才不会返回出来。每次在启动segment合并工作时,那些被标记为删除的文档才会被真正删除。

删除文档

DELETE /cusotmer/doc/2?pretty

批量操作
像上面命令那样都是针对单条数据操作,es还提供了批量操作。

POST /customer/doc/_bulk?pretty
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }

这个例子是官网提供的,代表这要在customer索引下创建两个文档,文档索引_id不同。

POST /customer/doc/_bulk?pretty
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}

执行完以上命令之后,会修改第一条数据,并删除第二条。

以上都是小试牛刀,接下来才到了es复杂的命令
搜索API

GET /bank/_search?q=*&sort=account_number:asc&pretty

这个命令是查询bank索引的所有数据,q=* 表示匹配所有文档在bank索引下,sort=account_number:asc表示,返回值依据account_number进行asc排序。
除了上面的方式之外,还可以将参数放入body中

GET  /bank/_search
{
"query": {"match_all": {}},
"sort": [
	{"account_number": "asc"}
]
}

在这里插入图片描述
一如既往,我根据官网的说法解释一下属性含义:
took: 调用这个接口的反应时间
time_out: 判断查询是否超时
_shards: 有多少分片被查询了,同时告诉我们成功多少,失败多少
hits: 查询结果
hits.total: 匹配我们查询条件的文档总数
hits.hits: 实际查询的结果集合
hits.sort: 排序的关键字
hits._score和max_score这些字段都是需要在filter时候,才会有值;意义是,根据score可以获取相似度最高的数据,分数值越高相似度越大。

介绍查询语言

GET /bank/_search
{
  "query": { "match_all": {} },
  "size" : 1
}

size字段表示,匹配查询的数据,返回1条

GET /bank/_search
{
  "query": { "match_all": {} },
  "from": 10,
  "size": 10
}

from字段表示,从序号多少开始,

GET  /bank/_search
{"query": {"match_all": {}},
"_source": {"account_number", "balance"}
}

_source字段表示返回值显示的字段有哪些。
备注: match_all是查询所有;match是匹配某字段值;match_phrase匹配所有包含的数据。
eg.

GET /bank/_search
{
  "query": { "match_phrase": { "address": "mill lane" } }
}

匹配所有==mill lane的数据。

bool查询

GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}

查询所有满足address包含mill lane的数据,
备注: must 为包含的条件必须都为true才满足;should:包含条件满足一条即可;must_not:都不满足。
当然也可以进行组合使用:

GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "age": "40" } }
      ],
      "must_not": [
        { "match": { "state": "ID" } }
      ]
    }
  }
}

filter 查询

GET /bank/_search
{
	"query": {
		"bool": {
			{"must": {"match_all": {}}},
			"filter": {
				"range":{
					"balance": {
					"gte": 20000,
           			 "lte": 30000
					}
				}
			}
		}
	}
}

这个接口的意思是,首选匹配所有数据,然后根据balance字段进行过滤,查询出所有满足balance大于等于20000,小于等于30000,如果是大于就是gt(greater than) lt (less than) e(equal)
聚合查询

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword"
      }
    }
  }
}

这个接口相当于mysql中

SELECT state, COUNT(*) FROM bank GROUP BY state ORDER BY COUNT(*) DESC

结论

本文只是针对官网给出的入门级案例做出解释,主要是自己为了忘记时候方便查看,不喜勿喷。后续随着官网文档的深入会继续更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值