ES操作命令

本文详细介绍了如何在Elasticsearch中进行集群健康检查、节点管理、索引操作,包括创建、删除、文档管理、查询、聚合函数,以及索引模板、别名管理和数据操作技巧。涵盖了索引维护、数据分析与搜索的最佳实践。
#全局操作
#查看集群健康状况
GET /_cat/health?v

#查看节点情况
GET /_cat/nodes?v

#查看各个索引状态
GET /_cat/indices?v

#创建索引 PUT 索引名?pretty
PUT /movie_index

#删除索引
DELETE /movie_index

#查看某索引的分片情况
GET /_cat/shards/movie_index

#创建文档
PUT /movie_index/movie/1
{ "id":100,
 "name":"operation red sea",
 "doubanScore":8.5,
 "actorList":[ 
{"id":1,"name":"zhang yi"},
{"id":2,"name":"hai qing"},
{"id":3,"name":"zhang han yu"}
]
}

PUT /movie_index/movie/2
{
 "id":200,
 "name":"operation meigong river",
 "doubanScore":8.0,
 "actorList":[ 
{"id":3,"name":"zhang han yu"}
]
}


PUT /movie_index/movie/3
{
 "id":300,
 "name":"incident red sea",
 "doubanScore":5.0,
 "actorList":[ 
{"id":4,"name":"zhang san feng"}
]
}

#查询某个索引中全部文档 size控制个数
GET /movie_index/_search
{
"size":3
}

#根据文档ID查看文档
GET /movie_index/movie/1?pretty

#根据文档ID删除文档
DELETE /movie_index/movie/3

#删除后并不是真的删除,新增记录标记删除,需要合并
#也可以手动执行 进行合并触发
POST /_forcemerge 

#put 对已经存在的文档进行替换

PUT /movie_index/movie/3
{
 "id":300,
 "name":"incident red sea",
 "doubanScore":5.0,
 "actorList":[ 
{"id":4,"name":"zhang cuishan"}
]
}

#post新增操作,无法保证幂等性
#根据主键保证幂等性
#根据文档 id 更新文档 doc 固定写法
POST /movie_index/movie/3/_update?pretty
{
 "doc": {"name":"wudang"}
}

#根据条件更新文档
POST /movie_index/_update_by_query
{
"query": {
 "match":{
 "actorList.id":1
 } 
},
"script": {
 "lang": "painless",
 "source":"for(int i=0;i<ctx._source.actorList.length;i++){if(ctx._source.actorList[i].id==1){ctx._source.actorList[i].name='tttt'}}"
}
}

#删除文档属性
POST /movie_index/movie/1/_update
{
 "script" : "ctx._source.remove('name')"
}

#根据条件删除文档
POST /movie_index/_delete_by_query
{
  "query":{
    "match": {"id":100}
  }
}

#根据条件删除文档
POST /movie_index/_delete_by_query
{
  "query":{
    "match_all": {}
  }
}

GET /movie_index/_search

#批处理 在索引中批量创建两个文档
POST /movie_index/movie/_bulk
{"index":{"_id":66}}
{"id":300,"name":"incident red sea","doubanScore":5.0,"actorList":[{"id":4,"name":"zhang cuishan"}]}
{"index":{"_id":88}}
{"id":300,"name":"incident red sea","doubanScore":5.0,"actorList":[{"id":4,"name":"zhang cuishan"}]}


#批处理 在一个批量操作中,先更新第一个文档(ID 为 66),再删除第二个文档(ID 为 88)
pOST /movie_index/movie/_bulk
{"update":{"_id":"66"}}
{"doc": { "name": "wudangshanshang" } }
{"delete":{"_id":"88"}}


#----------------------------------查询操作
#查询出当前索引全部数据

GET /movie_index/_search?q=_id:66


GET /movie_index/_search


#根据电影名字进行查询
GET /movie_index/_search
{
  "query": {
    "match": {
      "name": "operation red sea"
    }
  }
}

#按照分词子属性进行查询
GET /movie_index/_search
{
  "query": {
    "match": {
      "actorList.name": "zhang han yu"
    }
  }
}

#按短语查询(相当于like %%)
GET /movie_index/_search
{
  "query": {
    "match_phrase": {
      "actorList.name": "zhang han yu"
    }
  }
}

#不分词,通过精准搜索匹配,term精准匹配,使用keyword完成
GET /movie_index/_search
{
  "query": {
    "term": {
      "actorList.name.keyword": {
        "value": "zhang han yu"
      }
    }
  }
}

#容错匹配
GET /movie_index/_search
{
  "query": {
    "fuzzy": {
      "name": "operati"
    }
  }
}

#过滤,先匹配,再过滤
GET /movie_index/_search
{
  "query": {
    "match": {
      "name": "red"
    }
  }
  ,"post_filter": {
    "term": {
      "actorList.id": 3
    }
  } 
}

#过滤-推荐使用   匹配和过滤同时进行
GET /movie_index/_search
{
  "query": {
    "bool": {
      "must": [
        {"match": {
          "name": "red"
        }}
      ],
      "filter": {
        "term": {
          "actorList.id": "3"
        }
      }
    }
  }
}


#范围查询 豆瓣评分在6-9之间的查询出来
GET /movie_index/_search
{
  "query": {
    "range": {
      "doubanScore": {
        "gte": 6,
        "lte": 9
      }
    }
  }
}

#按照豆瓣评分降序排序
GET /movie_index/_search
{
  "query": {
    "match": {
      "name": "red"
    }
  }, 
"sort": [
  {
    "doubanScore": {
      "order": "desc"
    }
  }
]
}

#分页查询 从什么开始,显示几条
GET /movie_index/_search
{
  "from": 0,
  "size": 2
}

#查询指定字段
GET /movie_index/_search
{
  "_source": ["id","name"]
  
}

#高亮,对命中的词进行高亮显示

GET /movie_index/_search
{
  "query": {
    "match": {
      "name": "red"
    }
  },
  "highlight": {
    "fields": {"name": {}},
    "pre_tags": "<a>",
    "post_tags": "</a>"
  }
}


#--------------聚合函数----------------
#需求一,取出每个演员共参演了多少电影
#aggs 表示聚合
#term 精准匹配
#terms 聚合操作,相当于group by
GET /movie_index/movie/_search
{
  "aggs": {
    "myAggs": {
      "terms": {
        "field": "actorList.name.keyword",
        "size": 10
      }
    }
  }
}


#需求二,每个演员参演电影的平均分,并按评分排序
GET /movie_index/_search
{
  "aggs": {
    "groupByname": {
      "terms": {
        "field": "actorList.name.keyword",
        "size": 10
        , "order": {
          "avg_score": "asc"
        }
      },
  "aggs": {
    "avg_score": {
      "avg": {
        "field": "doubanScore"
    }
  }
}
      }
    }
  }
}


#中文分词器 ik_smart 简易分词器
#ik_max_word
GET /_analyze
{
  "text": "无卡卡",
  "analyzer": "ik_max_word"
}


#mapping 
#直接创建Document,建立文档的时候自动创建index,同时mapping会自动定义

PUT /movie_chn_1/movie/1
{ "id":1,
 "name":"红海行动",
 "doubanScore":8.5,
 "actorList":[ 
 {"id":1,"name":"张译"},
 {"id":2,"name":"海清"},
 {"id":3,"name":"张涵予"}
]
}
PUT /movie_chn_1/movie/2
{
 "id":2,
 "name":"湄公河行动",
 "doubanScore":8.0,
 "actorList":[ 
{"id":3,"name":"张涵予"}
]
}
PUT /movie_chn_1/movie/3
{
 "id":3,
 "name":"红海事件",
 "doubanScore":5.0,
 "actorList":[ 
{"id":4,"name":"张三丰"}
]
}


GET /movie_chn_1/_search

#查看自动定义的mapping
GET /movie_chn_1/_mapping


GET /movie_chn_1/movie/_search
{
 "query": {
 "match": {
 "name": "海行"
 }
 }
}

#基于中文分词搭建索引-手动定义 mapping
#定义 Index,指定 mapping
PUT movie_chn_2
{
 "mappings": {
 "movie":{
 "properties": {
 "id":{
 "type": "long"
 },
 "name":{
 "type": "text", 
 "analyzer": "ik_smart"
 },
 "doubanScore":{
 "type": "double"
 },
 "actorList":{
 "properties": {
 "id":{
 "type":"long"
 },
 "name":{
 "type":"keyword"
 }
 }
 }
 }
 }
 }
}

#向 Index 中放入 Document
PUT /movie_chn_2/movie/1
{ "id":1,
 "name":"红海行动",
 "doubanScore":8.5,
 "actorList":[ 
 {"id":1,"name":"张译"},
 {"id":2,"name":"海清"},
 {"id":3,"name":"张涵予"}
]
}
PUT /movie_chn_2/movie/2
{
 "id":2,
 "name":"湄公河行动",
 "doubanScore":8.0,
 "actorList":[ 
{"id":3,"name":"张涵予"}
]
}
PUT /movie_chn_2/movie/3
{
 "id":3,
 "name":"红海事件",
 "doubanScore":5.0,
 "actorList":[ 
{"id":4,"name":"张三丰"}
]
}

GET /movie_chn_2/movie/_search
{
 "query": {
 "match": {
 "name": "海行"
 }
 }
}



#索引数据拷贝
POST _reindex
{
 "source": {
 "index": "my_index_name"
 },
 "dest": {
 "index": "my_index_name_new"
 }
}



PUT 索引名
{ 
"aliases": {
 "索引别名": {}
 }
}
#创建索引的时候,手动 mapping,并指定别名
PUT movie_chn_3
{
 "aliases": {
 "movie_chn_3_aliase": {}
 },
 "mappings": {
 "movie":{
 "properties": {
 "id":{
 "type": "long"
 },
 "name":{
 "type": "text", 
 "analyzer": "ik_smart"
 },
 "doubanScore":{
 "type": "double"
 },
 "actorList":{
 "properties": {
 "id":{
 "type":"long"
 },
 "name":{
 "type":"keyword"
 }
 }
 }
 }
 }
 }
}

GET /movie_chn_3_a2/_search


#为已存在的索引增加别名

POST _aliases
{
 "actions": [
 { "add":{ "index": "索引名", "alias": "索引别名" }}
 ]
}
#给 movie_chn_3 添加别名
POST _aliases
{
 "actions": [
 { "add":{ "index": "movie_chn_3", "alias": "movie_chn_3_a2" }}
 ]
}

#查询别名列表
GET _cat/aliases?v


#删除某个索引的别名
POST _aliases
{
 "actions": [
 { "remove": { "index": "movie_chn_3", "alias": "movie_chn_3_a2" }}
 ]
}

#使用场景-给多个索引分组
POST _aliases
{
 "actions": [
 { "add": { "index": "movie_chn_1", "alias": "movie_chn_query" }},
 { "add": { "index": "movie_chn_2", "alias": "movie_chn_query" }}
 ]
}
GET movie_chn_query/_search

#给索引的一个子集创建视图
POST _aliases
{
 "actions": [
 { 
 "add": 
 { 
 "index": "movie_chn_1", 
 "alias": "movie_chn_1_sub_query",
 "filter": {
 "term": { "actorList.id": "4"}
 }
 }
 }
 ]
}
GET movie_chn_1_sub_query/_search


#在运行的集群中可以无缝的从一个索引切换到另一个索引
POST /_aliases
{
 "actions": [
 { "remove": { "index": "movie_chn_1", "alias": "movie_chn_query" }},
 { "remove": { "index": "movie_chn_2", "alias": "movie_chn_query" }},
 { "add": { "index": "movie_chn_3", "alias": "movie_chn_query" }}
 ]
}


#创建索引模板
PUT _template/template_movie2020
{
 "index_patterns": ["movie_test*"], 
 "settings": { 
 "number_of_shards": 1
 },
 "aliases" : { 
 "{index}-query": {},
 "movie_test-query":{}
 },
 "mappings": { 
 "_doc": {
 "properties": {
 "id": {
 "type": "keyword"
 },
 "movie_name": {
 "type": "text",
 "analyzer": "ik_smart"
 }
 }
 }
 }
}

#测试 向索引中添加数据
POST movie_test_202011/_doc
{
 "id":"333",
 "name":"zhang3"
}

GET /_cat/aliases

GET movie_test_202011-query/_mapping

GET movie_test_202011/_search

# 查看系统中已有的模板清单
GET /_cat/templates


#查看某个模板详情
GET _template/template_movie2020
#或者
GET _template/template_movie*

Elasticsearch 是一个高度可扩展的开源全文搜索和分析引擎,广泛用于实时数据分析、日志处理、全文搜索等场景。掌握其常用操作命令对于开发和运维人员至关重要。以下是 Elasticsearch 中的一些基本和常用操作命令,涵盖索引管理、数据操作、集群设置等方面。 ### 索引管理 索引是 Elasticsearch 中的基本概念之一,类似于数据库中的“数据库”。常见的索引管理命令如下: - **创建索引** 使用以下命令创建一个名为 `my-index` 的索引: ```bash PUT /my-index ``` - **查看索引信息** 可以通过以下命令获取指定索引的详细信息: ```bash GET /my-index ``` - **删除索引** 删除一个或多个索引,例如删除 `my-index`: ```bash DELETE /my-index ``` 若要使用通配符批量删除索引,需先开启相关设置: ```bash PUT /_cluster/settings { "persistent": { "action.destructive_requires_name": false } } ``` 然后执行删除命令,例如删除所有以 `log-` 开头的索引: ```bash DELETE /log-* ``` 删除完成后建议恢复设置: ```bash PUT /_cluster/settings { "persistent": { "action.destructive_requires_name": true } } ``` - **更新副本数和分片数** 可以在创建索引时指定分片数和副本数,也可以在创建后修改副本数: ```bash PUT /my-index { "settings": { "number_of_shards": 3, "number_of_replicas": 2 } } ``` 修改副本数: ```bash PUT /my-index/_settings { "number_of_replicas": 3 } ``` ### 数据操作 Elasticsearch 支持多种数据操作方式,包括文档的增删改查。 - **添加文档** 可以为文档指定 ID 或让系统自动生成: ```bash POST /my-index/_doc/1 { "title": "Elasticsearch Basics", "content": "Introduction to Elasticsearch" } ``` - **获取文档** 通过指定索引和文档 ID 获取数据: ```bash GET /my-index/_doc/1 ``` - **更新文档** 更新文档内容时,可以使用 `POST` 或 `PUT` 方法: ```bash POST /my-index/_update/1 { "doc": { "content": "Updated content" } } ``` - **删除文档** 删除指定文档: ```bash DELETE /my-index/_doc/1 ``` ### 查询操作 Elasticsearch 提供了强大的查询功能,支持多种查询方式。 - **基本查询** 查询所有文档: ```bash GET /my-index/_search { "query": { "match_all": {} } } ``` - **基于字段的查询** 例如查询 `title` 字段中包含 `Elasticsearch` 的文档: ```bash GET /my-index/_search { "query": { "match": { "title": "Elasticsearch" } } } ``` - **过滤查询** 过滤器查询不计算相关性得分,适合精确匹配: ```bash GET /my-index/_search { "query": { "term": { "title.keyword": "Elasticsearch" } } } ``` ### 集群与节点管理 Elasticsearch 的集群和节点管理也是日常运维的重要部分。 - **查看集群健康状态** 获取集群的整体健康状态: ```bash GET /_cluster/health ``` - **查看节点信息** 获取当前集群中所有节点的信息: ```bash GET /_cat/nodes?v ``` - **更新集群设置** 修改集群的持久化设置,例如开启批量删除功能: ```bash PUT /_cluster/settings { "persistent": { "action.destructive_requires_name": false } } ``` ### 查询与过滤上下文 Elasticsearch 中的查询分为查询上下文(Query Context)和过滤上下文(Filter Context)[^1]。查询上下文会计算文档的相关性得分,而过滤上下文则不计算,适用于精确匹配。例如,在过滤上下文中使用 `bool` 查询: ```bash GET /my-index/_search { "query": { "bool": { "filter": [ { "term": { "status": "published" } } ] } } } ``` ### 总结 Elasticsearch 提供了丰富的命令和 API 接口来管理索引、操作数据以及监控集群状态。熟练掌握这些常用命令可以提高开发效率并简化运维工作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值