ElasticSearch语法总结

ElasticSearch语法总结本文档详细介绍了 Elasticsearc 的查询语句 包括查看集群健康 节点和索引信息 以及索引和文档的增删改查操作

大家好,欢迎来到IT知识分享网。


一、前言

  1. es是面向文档型数据库,一条数据就是一个文档,可以通过下面这张表与关系型数据库进行类比:
ES Mysql
Index(索引) Database(数据库)
Type(类型:es7+已删除) Table(表)
Documents(文档) Row(行)
Field(字段) Column(列)
  1. 正排索引:id 建立索引,通过 id 查询数据。
    倒排索引: 用数据中的 关键词 建立索引,通过 关键词 查询id

二、查询语句

1.综合

<1>帮助

GET /_cat/health?help 

<2>查询所有

GET /_search { 
       "query": { 
       "match_all": { 
      } } } 

<3>查看集群健康信息

GET /_cat/health?v 

<4>查看集群中节点信息

GET /_cat/nodes?v 

<5>查看集群中的索引信息

# 第一种 GET /_cat/indices?v # 第二种(简化) GET /_cat/indices?v&h=health,status,index 

2.索引

<1>新增

PUT /book 

<2>删除

DELETE /book 

<3>查询

列出全部索引信息

GET /_cat/indices?v 

3.文档

<1>声明索引下的文档字段类型

先创建索引

PUT /book { 
              "settings": { 
              "number_of_shards": 5, "number_of_replicas": 1 }, "mappings": { 
              "dynamic": "strict", # 插入数据时,如果遇到不存在的字段,不新增字段,直接报错 "properties": { 
              "title": { 
              "type": "text", "index": true }, "publisher": { 
              "type": "keyword", "index": true }, "page": { 
              "type": "text", "index": false }, "my_vector": { 
              "type": "dense_vector", "dims": 2 } } } } 

ps:

  1. “type”: “text”
    文本类型【使用 match 检索时自动进行分词】
  2. “type”: “keyword”
    键值类型【使用 match 检索时不会进行分词】
  3. “index”: true
    建立索引【参与检索】
  4. “index”: false
    不建立索引【不参与检索】

<2>新增

– 新增时指定id
POST /book/_doc/1 { 
              "title":"历史上的今天", "created":"2018-12-25" } 
– 新增时不指定id【随机生成id】
POST /book/_doc { 
              "title":"历史上的今天", "created":"2018-12-25" } 

<3>删除

根据id删除

DELETE /book/_doc/1 

<4>修改

– 根据id修改【全部字段】
# title 和 created 全部更新 PUT /book/_doc/1 { 
                "title":"历史上的今天2", "created":"2021-01-01" } 
– 根据id修改【单个字段】
# 仅更新 created  POST /book/_update/1 { 
                "doc": { 
                "created":"2021-01-01" } } 

<5>查询

– 根据id查询

查询 book 索引下 _id 为 1 的文档

# 写法1 GET /book/_doc/1 # 写法2 GET /book/_search { 
                 "query": { 
                 "match": { 
                 "_id": 1 } } } 

– 查询全部

查询 book 索引下的全部文档【默认返回前10000条】

# 写法1 GET /book/_search # 写法2 GET /book/_search { 
                  "query": { 
                  "match_all": { 
                  } } } # 写法3 GET /book/_doc/_search 

– 查询总数

查询 book 索引下的文档总数

GET /book/_count 

– 分词查询
GET /book/_search { 
                    "query": { 
                    "match": { 
                    "title": "历史上的今天" } } } 

ps:

  1. match
    分词查询【检索 book 索引中 title 包含 历史、历史上、今天、历史上的今天 的数据】
  2. match_phrase
    不分词查询【检索 book 索引中 title 只包含 历史上的今天 的数据】

– 单条件查询

查询 book 索引下满足 title 包含 历史上的今天 的数据

# 推荐写法 GET /book/_search { 
                     "query": { 
                     "match_phrase": { 
                     "title": "历史上的今天" } } } # 不推荐写法 GET /book/_search?q=title:历史上的今天 

– 多条件查询【and】

查询 book 索引下满足 title 包含 历史上的今天 and created=2018-12-20 的数据

GET /book/_search { 
                      "query": { 
                      "bool": { 
                      "must": [ { 
                      "match_phrase": { 
                      "title": "历史上的今天" } }, { 
                      "match_phrase": { 
                      "created": "2018-12-20" } } ] } } } 

– 多条件查询【or】

查询 book 索引下满足 title 包含 历史上的今天 or title 包含 历史上的今天2 的数据

GET /book/_search { 
                       "query": { 
                       "bool": { 
                       "should": [ { 
                       "match_phrase": { 
                       "title": "历史上的今天" } }, { 
                       "match_phrase": { 
                       "title": "历史上的今天2" } } ] } } } 

– 查询结果高亮显示

查询 book 索引中满足 title 包含 “历史” 的数据,并将检索结果中的历史俩字用<em>标签包裹

GET /book/_search { 
                        "query": { 
                        "match_phrase": { 
                        "title": "历史" } }, "highlight": { 
                        "fields": { 
                        "title": { 
                       } } } } 

ps:


– 范围查询

查询 book 索引下满足 price > 100 的数据

GET /book/_search { 
                         "query": { 
                         "bool": { 
                         "filter": { 
                         "range": { 
                         "price": { 
                         "gt": 100.00 } } } } } } 

ps:

  1. gt 大于
  2. gte 大于等于
  3. it 小于
  4. ite 小于等于

– 分页查询

分页查询 book 索引下的全部数据,查询第1页,每页2条数据

GET /book/_search { 
                          "from": 0, "size": 2 } 

– 指定查询结果的返回字段

查询 book 索引下的全部数据,仅返回 title 字段

GET /book/_search { 
                           "_source": ["title"] } 

– 对查询结果排序

查询 book 索引下的全部数据,以创建时间降序排序

GET /book/_search { 
                            "sort": { 
                            "created": { 
                            "order": "desc" } } } 

ps:

  1. 升序 asc
  2. 降序 desc

– 聚合查询

对 book 索引下的 title 字段进行聚合查询

GET /book/_search { 
                             "aggs": { 
                             "title_group": { 
                             "terms": { 
                             "field": "title.keyword", "size": 10 } } }, "size": 0 } 

ps:

  1. “title_group”: {

    操作名称【这名随便起】
  2. “terms”: {

    聚合操作
  3. “field”: “title.keyword”,
    对哪个字段聚合【字符串类型需要加.keyword】
  4. “size”: 10
    最大返回数
  5. “size”: 0
    不返回命中数据

– 查询平均值

对 book 索引下的 price 字段求平均值

GET /book/_search { 
                              "aggs": { 
                              "price_avg": { 
                              "avg": { 
                              "field": "price" } } }, "size": 0 } 

ps:

  1. “price_avg”: {

    操作名称【这名随便起】
  2. “avg”: {

    求平均操作
  3. “field”: “price”
    对哪个字段求平均值
  4. “size”: 0
    不返回命中数据


免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/116944.html

(0)
上一篇 2025-11-25 08:15
下一篇 2025-11-25 08:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信