ELK-ElasticSearch索引详解
1、使用_cat API检测集群是否健康,确保9200端口号可用:
curl 'localhost:9200/_cat/health?v' 注意:绿色表示一切正常,黄色表示所有的数据可用但是部分副本还没有分配,红色表示部分数据因为某些原因不可用。 2、获取集群的节点列表
curl 'localhost:9200/_cat/nodes?v' 3、查看所有索引
curl http://localhost:9200/_cat/indices?v 4、curl用法
-X 指定http的请求方法,有HEAD GET POST PUT DELETE
-d 指定要传输的数据
-H 指定http请求头信息 5、新增索引
现在我们创建一个名为"customer"的索引,然后再查看所有的索引:
curl -XPUT 'localhost:9200/customer?pretty'
curl 'localhost:9200/_cat/indices?v' 6、插入和获取
6.1、插入数据 必须给ES指定索引的类型,如索引为customer,类型为external,ID为1,主体为JSON格式的语句:{ "name": "John Doe" } curl -XPUT -H "Content-Type: application/json" 'localhost:9200/customer/external/1?pretty' -d '
{
"name": "John Doe",
"age": 10
}' curl -XPUT -H "Content-Type: application/json" 'localhost:9200/customer/external/3?pretty' -d '
{
"name": "AAA",
"age": 20
}' curl -XPUT -H "Content-Type: application/json" 'localhost:9200/customer/external/4?pretty' -d '
{
"name": "BBB",
"age": 30
}' curl -XPUT -H "Content-Type: application/json" 'localhost:9200/customer/external/5?pretty' -d '
{
"name": "EEE",
"age": 40
}' 返回结果为:create:true 表示插入成功。 6.2、获取数据
curl -XGET 'localhost:9200/customer/external/1?pretty' 其中含义为:获取customer索引下类型为external,id为1的数据,pretty参数表示返回结果格式美观。 7、删除索引
curl -XDELETE 'localhost:9200/customer?pretty'
curl 'localhost:9200/_cat/indices?v' 8、ES基本用法
通过以上命令语句的学习,我们发现索引的增删改查有一个类似的格式,总结如下:
curl -X<REST Verb> <ip>:<Port>/<Index>/<Type>/<ID>
<REST Verb>:REST风格的语法谓词
<ip>:节点ip
<port>:节点端口号,默认9200
<Index>:索引名
<Type>:索引类型
<ID>:操作对象的ID号 ES的动作是以http方法来决定的,常用的http方法: GET/PUT/POST/DELETE 9、修改数据
curl -XPUT -H "Content-Type: application/json" 'localhost:9200/customer/external/2?pretty' -d '
{
"name": "aaa"
}' curl -XPUT -H "Content-Type: application/json" 'localhost:9200/customer/external/2?pretty' -d '
{
"name": "Java"
}' 上述命令语句是:先新增id为1,name为aaa的数据,然后将id为2的name修改为Java。 10.更新数据 10.1 这个例子展示如何将id为1文档的name字段更新为Jane Doe: curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/1/_update?pretty' -d '
{
"doc": { "name": "Jane Doe AAA" }
}' 10.2 这个例子展示如何将id为1数据的name字段更新为Jane Doe同时增加字段age为20:
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/1/_update?pretty' -d '
{
"doc": { "name": "Jane Doe", "age": 20 }
}' 10.3 也可以通过一些简单的scripts来执行更新。一下语句通过使用script将年龄增加5:
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/1/_update?pretty' -d '
{
"script" : "ctx._source.age += 5"
}' 11、删除数据
删除数据那是相当的直接. 下面的语句将执行删除Customer中ID为2的数据:
curl -XDELETE 'localhost:9200/customer/external/2?pretty' 12、批处理
下面语句将在一个批量操作中执行创建索引:
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_bulk?pretty' -d '
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }
' 查看数据
curl -XGET 'localhost:9200/customer/external/2?pretty'
curl -XGET 'localhost:9200/customer/external/_search?pretty' 下面语句批处理执行更新id为1的数据然后执行删除id为2的数据
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_bulk?pretty' -d '
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}
'
curl -XGET 'localhost:9200/customer/external/_search?pretty' 13、查询
curl 'localhost:9200/customer/external/_search?q=*&pretty' 上面示例返回所有customer中的索引数据。其中 q=* 表示匹配索引中所有的数据。 等价于:
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_search?pretty' -d '
{
"query": { "match_all": {} }
}' 14、查询语言
匹配所有数据,但只返回1个:
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_search?pretty' -d '
{
"query": { "match_all": {} },
"size": 1
}' 注意:如果siez不指定,则默认返回10条数据。 curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_search?pretty' -d '
{
"query": { "match_all": {} },
"from": 0,
"size": 10
}' 返回从0到10的数据。(索引下标从0开始) curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_search?pretty' -d '
{
"query": { "match_all": {} },
"sort": { "age": { "order": "desc" } }
}' curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_search?pretty' -d '
{
"query": { "match_all": {} },
"sort": { "age": { "order": "asc" } }
}'
上述示例匹配所有的索引中的数据,按照age字段降序排序,并且返回前10条(如果不指定size,默认最多返回10条)。 15、执行搜索
下面例子展示如何返回两个字段(name age)
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_search?pretty' -d '
{
"query": { "match_all": {} },
"_source": ["name", "age"]
}' 返回age为20 的数据:
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_search?pretty' -d '
{
"query": { "match": { "age": 20 } }
}' 返回name中包含Doe的所有数据::
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_search?pretty' -d '
{
"query": { "match": { "name": "Doe" } }
}' 返回name中包含Doe或者AAA的所有数据:
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_search?pretty' -d '
{
"query": { "match": { "name": "Doe AAA" } }
}' 和上面匹配单个词语不同,下面这个例子是多匹配(match_phrase短语匹配),返回name字段中包含短语 “mill lane”的所有数据:
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_search?pretty' -d '
{
"query": { "match_phrase": { "name": "mill lane" } }
}' 以下是布尔查询,布尔查询允许我们将多个简单的查询组合成一个更复杂的布尔逻辑查询。 这个例子将两个查询组合,返回name中含有AAA和Doe的所有记录数据,属于and操作:
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_search?pretty' -d '
{
"query": {
"bool": {
"must": [
{ "match": { "name": "Doe" } },
{ "match": { "name": "AAA" } } ]
}
}
}'
上述例子中,must表示所有查询必须都为真才被认为匹配。 相反, 这个例子组合两个查询,返回name中含有Doe或者Lynch的所有记录数据:
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_search?pretty' -d '
{
"query": {
"bool": {
"should": [
{ "match": { "name": "Doe" } },
{ "match": { "name": "Lynch" } } ]
}
}
}'
上述例子中,bool表示查询列表中只要有任何一个为真则认为匹配。 下面例子组合两个查询,返回地址中既没有mill也没有lane的所有数据:
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_search?pretty' -d '
{
"query": {
"bool": {
"must_not": [
{ "match": { "name": "Doe" } },
{ "match": { "name": "AAA" } } ]
}
}
}'
上述例子中,must_not表示查询列表中没有为真的(也就是全为假)时则认为匹配。 我们可以组合must、should、must_not来实现更加复杂的多级逻辑查询。
下面这个例子返回年龄等于10岁、name不为"Jane Doe AAA"的所有数据:
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_search?pretty' -d '
{
"query": {
"bool": {
"must": [
{ "match": { "age": "10" } }
],
"must_not": [
{ "match": { "name": "Jane Doe AAA" } }
]
}
}
}' 16、过滤filter(查询条件设置)
下面这个例子使用了布尔查询返回age在10到30之间的所有数据。
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_search?pretty' -d '
{
"query": {
"bool": {
"must": { "match_all": {} }
}
}
}' curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_search?pretty' -d '
{
"query": {
"bool": {
"must": { "match_all": {} },
"filter": {
"range": {
"age": {
"gte": 10,
"lte": 20
}
}
}
}
}
}' 17、聚合 Aggregations
下面这个例子: 将所有的数据按照age分组(group),然后按照分组记录数从大到小排序,返回前十条(默认):
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_search?pretty' -d '
{
"size": 0,
"aggs": {
"group_by_age": {
"terms": {
"field": "age"
}
}
}
}'
注意:我们设置size=0,不显示查询hits,因为我们只想看返回的聚合结果。 上述语句类似于以下SQL语句:
select age, count(*) from customer group by age order by count(*) desc 下面这个实例按照age分组,降序排序,返回age的平均值:
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/customer/external/_search?pretty' -d '
{
"size": 0,
"aggs": {
"group_by_age": {
"terms": {
"field": "age"
},
"aggs": {
"average_age": {
"avg": {
"field": "age"
}
}
}
}
}
}' curl -XGET 'localhost:9200/mytest?pretty' 删除索引
curl -XDELETE 'localhost:9200/mytest?pretty' 新增一条记录,并指定为article类型,ID为1
curl -XPUT -H "Content-Type: application/json" 'localhost:9200/mytest/article/1?pretty' -d '
{
"title": "小D课堂啦啦啦",
"content":"xdclass.net 小D课堂成立于2016年的,专注互联网在线教育,课程范围包括前端,后端,大数据,人工智能,微信开发等"
}' curl -XPUT -H "Content-Type: application/json" 'localhost:9200/mytest/article/2?pretty' -d '
{
"title": "test",
"content":"testsfsdfdsfdsf",
"PV":10
}' curl -XPUT -H "Content-Type: application/json" 'localhost:9200/mytest/article/3?pretty' -d '
{
"title": "test",
"content":"testsfsdfdsfdsf",
"PV":23
}' 搜索
curl -XGET 'http://localhost:9200/mytest/article/_search?q=title:D&pretty'
curl -XGET 'http://localhost:9200/mytest/article/_search?q=title:test&pretty' 查看数据
curl http://localhost:9200/es-message-2019.04.23/_search?pretty
ELK-ElasticSearch索引详解的更多相关文章
- ELK查询命令详解
目录 ELK查询命令详解 倒排索引 使用ElasticSearch API 实现CRUD 批量获取文档 使用Bulk API 实现批量操作 版本控制 什么是Mapping? 基本查询(Query查询) ...
- 搜索引擎框架之ElasticSearch基础详解(非原创)
文章大纲 一.搜索引擎框架基础介绍二.ElasticSearch的简介三.ElasticSearch安装(Windows版本)四.ElasticSearch操作客户端工具--Kibana五.ES的常用 ...
- ELK查询命令详解总结
目录 ELK查询命令详解 倒排索引 倒排索引原理 分词器介绍及内置分词器 使用ElasticSearch API 实现CRUD 批量获取文档 使用Bulk API 实现批量操作 版本控制 什么是Map ...
- Elasticsearch配置详解、文档元数据
目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch配置文件详解 a. 在上面博客中,我们已经安装并且成功 ...
- MySQL 联合索引详解
MySQL 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c ...
- Oracle索引详解
Oracle索引详解(二) --索引分类 Oracle 提供了大量索引选项.知道在给定条件下使用哪个选项对于一个程序的性能来说非常重要.一个错误的选择可能会引发死锁,并导致数据库性能急剧下降或进程 ...
- 【详细解析】MySQL索引详解( 索引概念、6大索引类型、key 和 index 的区别、其他索引方式)
[详细解析]MySQL索引详解( 索引概念.6大索引类型.key 和 index 的区别.其他索引方式) MySQL索引的概念: 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分 ...
- elasticsearch系列三:索引详解(分词器、文档管理、路由详解(集群))
一.分词器 1. 认识分词器 1.1 Analyzer 分析器 在ES中一个Analyzer 由下面三种组件组合而成: character filter :字符过滤器,对文本进行字符过滤处理,如 ...
- elasticsearch系列二:索引详解(快速入门、索引管理、映射详解、索引别名)
一.快速入门 1. 查看集群的健康状况 http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 ...
- elasticsearch配置详解
一.说明 使用的是新版本5.1,直接从官网下载rpm包进行安装,https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5 ...
随机推荐
- [HEOI/TJOI2016]序列
Description: 给你一个序列,每个数可能变化为另一个数,每次最多有一个数变化 求最长的子序列,无论如何变化,这个子序列都不下降 Hint: \(n \le 10^5\) Solution: ...
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第6章编程练习9
#include <iostream> #include <fstream> #include <cstdlib> #include <string> ...
- 循环结构for
教程:高能:语句结构都是由关键字开头,用冒号结束! 一:语句结构 for <variable> in <sequence>: <statements>else ...
- Android Studio 全局内替换字符串
Ctrl+Shift+R
- Task 的用法
Task的功能喝Thread类似,写法也很简单: 两种方式: 第一 Task t1=new Task(()=>{}); t1.Start();//启动Task t1.Wait();//若调用Wa ...
- truffle 开发入门教程
1.安装nodejs 2.安装truffle:执行命令: npm install -g truffle 3.truffle init (可加项目名) 4.windows 要删除根目录中的 truff ...
- TCP协议学习总结(下)
在前两边TCP学习总结中,也大概地学习了TCP的整个流程,但许多细节中的细节并没有详细学习,例如超时重传问题,每次瓶颈回归慢启动效率问题以及最大窗口限制问题等.本学习篇章最要针对这些细节中的细节进行学 ...
- 深入理解JVM(七)——性能监控工具
前言 工欲善其事必先利其器,性能优化和故障排查在我们大都数人眼里是件比较棘手的事情,一是需要具备一定的原理知识作为基础,二是需要掌握排查问题和解决问题的流程.方法.本文就将介绍利用性能监控工具,帮助开 ...
- Redis两种秒杀抢购思路
方式一:使用DECR减库存 /** * 外卡进入减库存 * @param competitionQuarterInDTO * @return */@Overridepublic int otherCa ...
- URL跳转与webview安全浅谈
URL跳转与webview安全浅谈 我博客的两篇文章拼接在一起所以可能看起来有些乱 起因 在一次测试中我用burpsuite搜索了关键词url找到了某处url我测试了一下发现waf拦截了指向外域的请求 ...