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
共有两种:
- URI Search
- 操作简便,方便通过命令行测试
- 但是仅包含部分查询语法
- Request Body Search
- es 最常用的方式,查询丰富。
- 提供的完备查询语法Query DSL(Domain Specific Language)
分词分析
帮助分析某个analyzer是如何分析和索引一段文字
POST _analyze
{
"analyzer": "standard",
"text": "我们都是中国人"
}
分数说明
提供查询结果的分数说明
GET /movie/_explain/1
{
"query": {
"match": {
"name": "流浪地球"
}
}
}
查询类型分析
通过profile属性,分析查询类型为PhraseQuery、TermQuery、BooleanQuery等类型中的哪一种
GET /movie/_search?q=name:(地球 红)
{
"profile": true
}