Elasticsearch的RESTful Api使用

本文介绍了如何使用Elasticsearch的RESTfulAPI进行索引管理,包括查看集群健康状况、创建和删除索引、文档的增删改查以及批量操作。同时,还涉及到了分词分析、查询分数的解释和查询类型的分析,为Elasticsearch的日常操作提供了详细指导。
摘要由CSDN通过智能技术生成

Elasticsearch的RESTful Api使用

查询集群健康情况

GET /_cat/health?v

?v表示显示头信息

参数说明:

  • cluster:集群名称
  • status:集群状态 green 集群一切正常;yellow 集群不可靠但可用;red 集群不可用,有故障
  • node.total:节点总数量
  • node.data:数据节点的数量
  • shards:存活的分片数量
  • pri:主分片数量
  • relo:迁移中的分片数量
  • init:初始化中的分片数量
  • unassign:未分配的分片
  • pending_tasks:准备中的任务
  • max_task_wait_time:任务最长等待时间
  • active_shards_percent:激活的分片百分比

查看所有索引

GET /_cat/indices?v

若响应health status index uuid pri rep docs.count docs.deleted store.size pri.store.size说明集群中还没有索引

  • health:索引状态 green 集群完整;yellow 单点正常、集群不完整;red 单点不正常
  • status:是否能使用
  • index:索引名
  • uuid:索引统一编号
  • pri:主节点几个分片
  • rep:从节点几个(副本数)
  • docs.count:文档数
  • docs.deleted:文档被删了多少
  • store.size:整体占空间大小
  • pri.store.size:主节点占空间大小

其他的_cat命令

命令描述
/_cat/allocation查看单节点的shard分配整体情况
/_cat/shards查看所有shard的详细情况
/_cat/shards/{index}查看指定分片的详细情况
/_cat/master查看master节点信息
/_cat/nodes查看所有节点信息
/_cat/indices/{index}查看集群中指定index的详细信息
/_cat/segments查看各index的segment详细信息,包括segment名,所属shard,内存(磁盘)占用大小,是否刷盘
/_cat/segments/{index}查看指定index的segment详细信息
/_cat/count查看当前集群的doc数量
/_cat/count/{index}查看指定索引的doc数量
/_cat/recovery查看集群内每个shard的修复状态
/_cat/recovery/{index}查看指定索引shard的修复状态
/_cat/pending_tasks查看当前集群的pending task
/_cat/aliases查看集群中所有alias信息,路由配置等
/_cat/aliases/{alias}查看指定索引的alias信息
/_cat/thread_pool查看集群各节点内部不同类型的threadpool的统计信息
/_cat/plugins查看集群各个节点上的plugin信息
/_cat/fielddata查看当前集群各个节点的fielddata内存使用情况
/_cat/fielddata/{fields}查看指定field的内存使用情况,里面传field属性对应的值
/_cat/nodeattrs查看单节点的自定义属性
/_cat/repositories输出集群中注册快照存储库
/_cat/templates输出当前正在存在的模板信息

创建索引

PUT /movie?pretty

?pretty表示格式化JSON响应

索引名称长度不超过255个字符,不可使用特殊字符,可使用下划线(_)、加号(+)、减号(-)但不可以以它们开头。

可以在创建索引时定义mapping等属性,search_analyzer属性默认与analyzer属性一致:

PUT /movie
{
  "mappings": {
    "properties": {
      "actorList": {
        "properties": {
          "gender": {
            "type": "long"
          },
          "name": {
            "type": "text",
            "analyzer": "ik_max_word"
          }
        }
      },
      "doubanScore": {
        "type": "float"
      },
      "id": {
        "type": "long"
      },
      "name": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_smart"
      }
    }
  }
}

删除索引

DELETE /movie

修改索引

已经存在的mapping属性是无法修改的,只能做新增,例如下面修改分析器的操作就会失败:

POST /movie/_mappings
{
  "properties": {
    "name": {
      "type": "text",
      "analyzer": "standard",
      "search_analyzer": "standard"
    }
  }
}

会报与已存在mapper冲突的错误:

{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": """Mapper for [name] conflicts with existing mapper:
	Cannot update parameter [analyzer] from [ik_max_word] to [standard]"""
      }
    ],
    "type": "illegal_argument_exception",
    "reason": """Mapper for [name] conflicts with existing mapper:
	Cannot update parameter [analyzer] from [ik_max_word] to [standard]"""
  },
  "status": 400
}

查看索引

GET /movie

查看索引自身信息,包括mappings、settings等,可以直接指定端点查询GET /movie/_mappings

创建文档

POST /movie/_doc/1
{
  "id": 100,
  "name": "流浪地球",
  "doubanScore": 7.9,
  "actorList": [
    {
      "gender": 1,
      "name": "吴京"
    },
    {
      "gender": 1,
      "name": "吴孟达"
    }
  ]
}

可以指定文档ID,不指定由系统随机生成ID串

批量操作文档

Elasticsearch支持使用_bulk端点批量操作文档,奇数行是操作描述,偶数行是文档数据,当索引不存在时会自动创建

  • create 如果文档不存在就创建,但如果文档存在就返回错误
  • index 如果文档不存在就创建,如果文档存在就更新
  • update 更新一个文档,如果文档不存在就返回错误
  • delete 删除一个文档,如果要删除的文档id不存在,就返回错误
POST /movie/_bulk
{"create":{"_id":1}}
{"id":100,"name":"流浪地球","doubanScore":7.9,"actorList":[{"gender":1,"name":"吴京"},{"gender":1,"name":"吴孟达"}]}
{"create":{"_id":2}}
{"id":200,"name":"流浪地球2","doubanScore":8.2,"actorList":[{"gender":1,"name":"吴京"},{"gender":1,"name":"沙溢"}]}
{"create":{"_id":3}}
{"id":300,"name":"满江红","doubanScore":7.4,"actorList":[{"gender":1,"name":"张译"}]}

也可以这样操作,姿势很多

POST /_bulk
{"create":{"_index":"movie","_id":1}}
{"id":100,"name":"流浪地球","doubanScore":7.9,"actorList":[{"gender":1,"name":"吴京"},{"gender":1,"name":"吴孟达"}]}
{"create":{"_index":"movie","_id":2}}
{"id":200,"name":"流浪地球2","doubanScore":8.2,"actorList":[{"gender":1,"name":"吴京"},{"gender":1,"name":"沙溢"}]}
{"create":{"_index":"movie","_id":3}}
{"id":300,"name":"满江红","doubanScore":7.4,"actorList":[{"gender":1,"name":"张译"}]}

当然也可以先创建索引再进行_bulk

删除文档

DELETE /movie/_doc/1

查询文档

GET /movie/_doc/1

全量更新文档

PUT /movie/_doc/1
{
  "id": 100,
  "name": "流浪地球",
  "doubanScore": 8,
  "actorList": [
    {
      "gender": 1,
      "name": "吴京"
    },
    {
      "gender": 1,
      "name": "吴孟达"
    },
    {
      "gender": 0,
      "name": "李光洁"
    }
  ]
}

局部更新文档

POST /movie/_update/1
{
  "doc": {
    "doubanScore": 8
  }
}

索引的搜索

GET /movie/_search

共有两种:

  1. URI Search
    • 操作简便,方便通过命令行测试
    • 但是仅包含部分查询语法
  2. Request Body Search
    • es 最常用的方式,查询丰富。
    • 提供的完备查询语法Query DSL(Domain Specific Language)

分词分析

帮助分析某个analyzer是如何分析和索引一段文字

POST _analyze
{
  "analyzer": "standard",
  "text": "我们都是中国人"
}

分数说明

提供查询结果的分数说明

GET /movie/_explain/1
{
  "query": {
    "match": {
      "name": "流浪地球"
    }
  }
}

查询类型分析

通过profile属性,分析查询类型为PhraseQueryTermQueryBooleanQuery等类型中的哪一种

GET /movie/_search?q=name:(地球 红)
{
  "profile": true
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值