0%

Elasticsearch命令行操作

Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的,这三个产品被设计成一个集成解决方案,称为Elastic Stack(旧称ELK stack)。它是一种能够从任意数据源抽取数据,并实时对数据进行搜索、分析和可视化展现的数据分析框架。

一、基础

  1. cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行,它支持文件上传和下载,所以是综合传输工具,但按传统习惯称cURL为下载工具。通过制定不同的参数可实现不同的功能,常见如下:

    • -X command:指定HTTP请求方法,command常见如:GETPUTPOSTDELETE等,默认GET。
    • -H name:value:指定HTTP请求header,常见如Cache-Control:no-cacheContent-Type: application/json
    • -d command:指定HTTP请求POST方式请求数据,如-d 'login=emma&password=123'-X POST-d 'login=emma' -d 'password=123' -X POST
  2. Elasticsearch常用命令,参考

    • _cat命令用户查看系统相关信息,可指定不同的子命令实现不同查询,常见如下:
      • nodes子命令用于列出实例有几个节点
      • indices子命用于令列出实例的索引
    • _update命令用于更新文档,需要配合doc属性一起使用
    • _search命令用于查询文档,可指定查询条件
    • _all命令用于查询文档所有的索引

url后添加?v参数可查看具体信息

二、实战

  1. API:curl -XGET "localhost:9200/_cat"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/thread_pool/{thread_pools}
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/nodeattrs
/_cat/repositories
/_cat/snapshots/{repository}
/_cat/templates
/_cat/ml/anomaly_detectors
/_cat/ml/anomaly_detectors/{job_id}
/_cat/ml/trained_models
/_cat/ml/trained_models/{model_id}
/_cat/ml/datafeeds
/_cat/ml/datafeeds/{datafeed_id}
/_cat/ml/data_frame/analytics
/_cat/ml/data_frame/analytics/{id}
/_cat/transforms
/_cat/transforms/{transform_id}
  1. 索引相关

    • 创建索引curl -XPUT "localhost:9200/liusir"
      • -XPOST会报错{"error":"Incorrect HTTP method for uri [/liusir] and method [POST], allowed: [PUT, DELETE, HEAD, GET]","status":405}
    • 查看索引curl -XGET "localhost:9200/_cat/indices?v"
    • 删除索引信息curl -XDELETE "localhost:9200/example1?pretty"
    • 查询索引curl -XGET "localhost:9200/liusir?pretty"
  2. 文档相关

    • 插入文档curl -XPOST -H "Content-Type: application/json" -d '{"addr":"beijing"}' "localhost:9200/liusir/1"
    • -XPUT则必须多级,如curl -XPUT -H "Content-Type: application/json" -d '{"name":"liusir"}' "localhost:9200/liuyulong/user/1"
    • 查看文档,语法GET index(索引名称)/type(type名称)/id(id的值)
      • 查看文档不指定索引curl -XGET "localhost:9200/_search?pretty"
      • 查看文档指定索引curl -XGET "localhost:9200/liusir/_search?pretty"
      • 根据主键查询文档curl -XGET "localhost:9200/liuyulong/user/1?pretty"
    • 更新文档
      • 方式一:curl -XPOST -H "content-type:application/json" "localhost:9200/liuyulong/user/1?pretty" -d '{"name":"haha"}'
        • 重新查看curl -XGET "localhost:9200/liuyulong/user/1?pretty"
      • 方式二:curl -XPOST -H "content-type:application/json" "localhost:9200/liuyulong/user/1/_update?pretty" -d '{"doc":{"name":"heihei"}}'
        • 重新查看curl -XGET "localhost:9200/liuyulong/user/1?pretty"
    • 删除文档curl -XDELETE "localhost:9200/liuyulong/user/1?pretty"
      • 重新查看curl -XGET "localhost:9200/liuyulong/user/1?pretty"
  3. 指定查询条件_search

    • 初始化数据

      • curl -XPUT -H "Content-Type: application/json" -d '{"name":"liusir","age":10}' "localhost:9200/liuyulong/user/1"
      • curl -XPUT -H "Content-Type: application/json" -d '{"name":"liuliu", "age":10}' "localhost:9200/liuyulong/user/2"
      • curl -XPUT -H "Content-Type: application/json" -d '{"name":"liu"}' "localhost:9200/liuyulong/user/3"
    • 查询所有curl -XGET "localhost:9200/liuyulong/user/_search?pretty"

    • 查询指定字符串curl -XGET "localhost:9200/liuyulong/user/_search?pretty" -d '{"query":{"match":{"name":"liusir"}}}' -H "content-type:application/json"

    • 不返回文档内容curl -XGET "localhost:9200/liuyulong/user/_search?pretty" -d '{"_source":"false","query":{"match":{"name":"liusir"}}}' -H "content-type:application/json"

    • 返回指定字段curl -XGET "localhost:9200/liuyulong/user/_search?pretty" -d '{"_source":["name"],"query":{"match":{"name":"liusir"}}}' -H "content-type:application/json"

    • AND条件

      • curl -XPUT -H "Content-Type: application/json" -d '{"name":"liusir","age":10}' "localhost:9200/liuyulong/user/4"
      • curl -XPUT -H "Content-Type: application/json" -d '{"name":"liuliu", "age":10}' "localhost:9200/liuyulong/user/5"
      • curl -XGET "localhost:9200/liuyulong/user/_search?pretty" -d '{"query":{"bool":{"must":[{"match":{"name":"liusir"}},{"match":{"age":10}}]}}}' -H "content-type:application/json"
    • OR条件

      • curl -XGET "localhost:9200/liuyulong/user/_search?pretty" -d '{"query":{"bool":{"should":[{"match":{"name":"liusir"}},{"match":{"age":10}}]}}}' -H "content-type:application/json"
    • 排序,好麻烦

  4. 聚合插叙

    • 平均值
    • 最大值/最小值
  5. 多级索引

三、参考

  1. 参考一
  2. 参考二
  3. 参考三
  4. 参考四