工作常用ES DSL查询语句(干货满满)

这篇具有很好参考价值的文章主要介绍了工作常用ES DSL查询语句(干货满满)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

   工作中几乎每天都需要使用到ES查询数据,需要根据自己的查询需求构造DSL查询语句来实现,本文记录并分享本人工作中常用的DSL语句以及所遇到问题的解决方案,DSL语句灵活多变,可进行多种组合,任你搭配,让我们一起往下看,希望对你有帮助。

二、DSL常用查看索引语句

2.1 查看所有索引的信息(indices?v)

GET _cat/indices
# 以表格形式展示,推荐*
GET _cat/indices?v

2.2 查看特定索引的信息(_stats)

index_name/_stats

2.3 查看索引的映射(_mapping)

index_name/_mapping

2.4 查看索引的设置(_settings)

GET index_name/_settings

2.5 查看索引的别名(aliases)

GET _cat/aliases

2.6 查看索引的文档数量(_count)

GET index_name/_count

2.7 查看索引的存储大小(_stats/store)

GET index_name/_stats/store

2.8 查看索引的字段名(_search)

GET index_name/_search?size=0

2.9 查看索引的分片信息(_cat/shards)

GET index_name/_cat/shards

2.10 查看索引的健康状态(_cluster/health)

GET _cluster/health/index_name

2.11 查看索引的索引速率(_cat/thread_pool)

GET _cat/thread_pool/index_name

2.12 查看索引的搜索速率(_cat/thread_pool/search)

GET _cat/thread_pool/search

2.13 查看索引的索引速率(_cat/thread_pool/index)

GET _cat/thread_pool/index

2.14 查看索引的删除速率(_cat/thread_pool/delete)

GET _cat/thread_pool/delete

2.15 查看索引的刷新速率(_cat/thread_pool/refresh)

GET _cat/thread_pool/refresh

2.16 查看索引的合并速率(_cat/thread_pool/merge)

GET _cat/thread_pool/merge

2.17 查看索引的查询速率(_cat/thread_pool/get)

GET _cat/thread_pool/get

2.18 查看索引的更新速率(_cat/thread_pool/update)

GET _cat/thread_pool/update

三、DSL常用查询语句

3.1 查询所有(match_all)

查询所有字段,默认显示10条数据。

GET index_name/?search
{
  "query": {
    "match_all": {
    }
  }
}

3.2 关键词全文查询(match)

GET index_name/?search
{
  "query": {
    "match": {
      "user": "YiShuoIT"
    }
  }
}

3.3 精确匹配查询(term)

GET index_name/?search
{
  "query": {
    "term": {
      "user": "YiShuoIT"
    }
  }
}

3.4 多值精确匹配查询(terms)

GET index_name/?search
{
  "query": {
    "terms": {
      "user": ["YiShuoIT", "YiShuo"]
    }
  }
}

3.5 通配符查询(wildcard)

GET index_name/?search
{
  "query": {
    "wildcard": {
      "user": "*YiShuo*"
    }
  }
}

3.6 多值通配符查询(多wildcard)

GET index_name/?search
{
  "query": {
    "bool": {
      "should": [
        {
          "wildcard": {
            "command": "curl*password*"
          }
        },
        {
          "wildcard": {
            "user": "YiShuo*"
          }
        }
      ]
    }
  }
}

3.7 字段前缀查询(prefix)

GET index_name/?search
{
   "query":{
      "prefix": {"user": "Yi"}
   }
}

3.8 多值字段前缀查询(多prefix)

GET index_name/?search
{
  "query": {
    "bool": {
      "should": [
        {
          "prefix": {
            "user": "Yi"
          }
        },
        {
          "prefix": {
            "command": "curl"
          }
        }
      ]
    }
  }
}

3.9 模糊匹配查询(fuzzy)

   fuzziness 参数用于指定模糊匹配的容忍度。它可以是一个数字(表示编辑距离)或一个字符串(表示模糊度)。例如,“2” 表示编辑距离为 2,“auto” 表示根据术语的长度自动计算模糊度。

GET index_name/?search
{
  "query": {
    "fuzzy": {
      "user": {
        "value": "yi",
        "fuzziness": "2"
      }
    }
  }
}

3.10 正则表达式查询(regexp)

GET index_name/?search
{
  "query": {
    "regexp": {
      "user": ".*YiShuo.*"
    }
  }
}

3.11 根据当天时间查询(range + filter + now)

GET index_name/?search
{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "timestamp": {
            "gte": "now/d",
            "lte": "now"
          }
        }
      }
    }
  }
}

3.12 根据自定义时间段查询(range + filter + datetime)

GET index_name/?search
{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "timestamp": {
            "gte": "2023-12-01 00:00:00",
            "lt": "2023-12-02 23:59:59",
            "time_zone": "+08:00",
            "format": "yyyy-MM-dd HH:mm:ss"
          }
        }
      }
    }
  }
}

3.13 满足条件查询 (must)

GET index_name/?search
{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "timestamp": {
            "gte": "2023-12-01 00:00:00",
            "lt": "2023-12-02 23:59:59",
            "time_zone": "+08:00",
            "format": "yyyy-MM-dd HH:mm:ss"
          }
        }
      },
      "must": [
        {
          "wildcard": {
            "command": "*"
          }
        },
        {
          "wildcard": {
            "ip": "192.*"
          }
        }
      ]
    }
  },
  "size": 1
}

3.14 排除条件查询(must_not)

GET index_name/?search
{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "timestamp": {
            "gte": "2023-12-01 00:00:00",
            "lt": "2023-12-02 23:59:59",
            "time_zone": "+08:00",
            "format": "yyyy-MM-dd HH:mm:ss"
          }
        }
      },
      "must_not": [
        {
          "wildcard": {
            "ip": "127.*"
          }
        },
        {
          "wildcard": {
            "ip": "localhost*"
          }
        }
      ]
    }
  },
  "size": 1
}

3.15 包含key查询(must + exists)

GET index_name/?search
{
  "query": {
    "bool": {
      "must": [
        {
          "wildcard": {
            "user": "Yi*"
          }
        },
        {
          "exists": {
            "field": "address"
          }
        }
      ]
    }
  },
  "size": 1
}

3.16 不包含key查询(must_not + exists)

GET index_name/?search
{
  "query": {
    "bool": {
      "must": [
        {
          "wildcard": {
            "user": "Yi*"
          }
        }
      ],
      "not_must": [
        {
          "exists": {
            "field": "address"
          }
        }
      ]
    }
  },
  "size": 1
}

3.17 排序查询(sort)

3.17.1 降序
GET index_name/?search
{
  "query": {
    "wildcard": {
      "ip": "192.168.*"
    }
  },
  "sort": [
    {
      "timestamp": {
        "order": "desc"
      }
    }
  ]
}
3.17.2 升序
GET index_name/?search
{
  "query": {
    "wildcard": {
      "ip": "192.168.*"
    }
  },
  "sort": [
    {
      "timestamp": {
        "order": "asc"
      }
    }
  ]
}

3.18 指定返回字段查询(_source)

GET index_name/?search
{
  "query": {
    "wildcard": {
      "ip": "192.168.*"
    }
  },
  "sort": [
    {
      "timestamp": {
        "order": "desc"
      }
    }
  ],
  "_source": [
    "user",
    "ip",
    "phone",
    "address"
  ]
}

3.19 指定条数查询(size)

最多单次查询10000条,超过10000条需要分页查询。

GET index_name/?search
{
  "query": {
    "wildcard": {
      "ip": "192.168.*"
    }
  },
  "sort": [
    {
      "timestamp": {
        "order": "desc"
      }
    }
  ],
  "_source": [
    "user",
    "ip",
    "phone",
    "address"
  ],
  "size": 10000
}

3.20 分页查询(from)

GET index_name/?search
{
  "query": {
    "wildcard": {
      "ip": "192.168.*"
    }
  },
  "sort": [
    {
      "timestamp": {
        "order": "desc"
      }
    }
  ],
  "_source": [
    "user",
    "ip",
    "phone",
    "address"
  ],
  "from": 1,
  "size": 100
}

3.21 关联多个index查询

GET index_name_one,index_name_two/?search
{
  "query": {
    "bool": {
      "must": [
        {
          "wildcard": {
            "user": "Yi*"
          }
        }
      ],
      "must_not": [
        {
          "wildcard": {
            "ip": "127.*"
          }
        },
        {
          "wildcard": {
            "ip": "localhost*"
          }
        }
      ]
    }
  },
  "size": 1
}
GET index_name_*/?search
{
  "query": {
    "bool": {
      "must": [
        {
          "wildcard": {
            "user": "Yi*"
          }
        }
      ],
      "must_not": [
        {
          "wildcard": {
            "ip": "127.*"
          }
        },
        {
          "wildcard": {
            "ip": "localhost*"
          }
        }
      ]
    }
  },
  "size": 1
}

3.22 布尔查询(bool)

   bool语句是常用的用于构建复杂查询逻辑的语句。bool语句可以通过组合多个条件子句来实现逻辑运算,包括must、must_not、should和filter。

3.22.1 bool+must查询
GET index_name/?search
{
  "query": {
    "bool": {
      "must": [
        {
          "wildcard": {
            "user": "Yi*"
          }
        }
      ],
      "must_not": [
        {
          "wildcard": {
            "ip": "127.*"
          }
        },
        {
          "wildcard": {
            "ip": "localhost*"
          }
        }
      ]
    }
  },
  "size": 1
}
3.22.2 bool+must_not查询
GET index_name/?search
{
  "query": {
    "bool": {
      "must": [
        {
          "wildcard": {
            "user": "Yi*"
          }
        }
      ],
      "must_not": [
        {
          "wildcard": {
            "ip": "127.*"
          }
        },
        {
          "wildcard": {
            "ip": "localhost*"
          }
        }
      ]
    }
  },
  "size": 1
}
3.22.3 bool+should查询
GET index_name/?search
{
  "track_total_hits": true,
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "should": [
              {
                "wildcard": {
                  "host": "www.baidu.com"
                }
              },
              {
                "wildcard": {
                  "host": "www.qq.com"
                }
              }
            ]
          }
        },
        {
          "bool": {
            "should": [
              {
                "wildcard": {
                  "user": "*龙*"
                }
              },
              {
                "wildcard": {
                  "user": "*虎*"
                }
              }
            ]
          }
        }
      ]
    }
  },
  "sort": [
    {
      "timestamp": {
        "order": "desc"
      }
    }
  ],
  "size": 1
}
3.22.4 bool+filter查询
GET index_name/?search
{
  "track_total_hits": true,
  "query": {
    "bool": {
      "filter": {
        "range": {
          "timestamp": {
            "gte": "2023-11-27 00:00:00",
            "lt": "2023-12-03 23:59:59",
            "time_zone": "+08:00",
            "format": "yyyy-MM-dd HH:mm:ss"
          }
        }
      }
    }
  },
  "sort": [
    {
      "timestamp": {
        "order": "desc"
      }
    }
  ],
  "size": 0
}
3.22.5 bool多种组合(bool+must+must_not+should+filter)
GET index_name/?search
{
  "track_total_hits": true,
  "query": {
    "bool": {
      "filter": {
        "range": {
          "timestamp": {
            "gte": "2023-11-27 00:00:00",
            "lt": "2023-12-03 23:59:59",
            "time_zone": "+08:00",
            "format": "yyyy-MM-dd HH:mm:ss"
          }
        }
      },
      "must": [
        {
          "bool": {
            "should": [
              {
                "wildcard": {
                  "host": "www.baidu.com"
                }
              },
              {
                "wildcard": {
                  "host": "www.qq.com"
                }
              }
            ]
          }
        },
        {
          "bool": {
            "should": [
              {
                "wildcard": {
                  "user": "*龙*"
                }
              },
              {
                "wildcard": {
                  "user": "*虎*"
                }
              }
            ]
          }
        }
      ],
      "must_not": [
        {
          "wildcard": {
            "address": {
              "value": "*广东*"
            }
          }
        }
      ]
    }
  },
  "sort": [
    {
      "timestamp": {
        "order": "desc"
      }
    }
  ],
  "size": 0
}

3.23 match、term、terms、should、must_not、bool、filter区别

match查询是全文搜索查询,根据相关性匹配查询字符串,进行分词处理。
term查询是精确匹配查询,直接与文档中的词项进行比较,不进行分词处理。
terms查询是多值匹配查询,匹配多个值中的任意一个。
should查询表示满足任意一个条件即可匹配成功,用于构建OR逻辑关系。
must_not查询表示条件不能满足才能匹配成功,用于排除特定条件。
bool查询是复合查询,通过组合多个查询子句构建复杂的查询逻辑,包括must、should和must_not。
filter查询用于过滤文档,不计算相关性分数,仅根据条件进行精确匹配,提高查询性能。

四、DSL常用统计语句

4.1 aggs terms

GET index_name/?search
{
  "track_total_hits": true,
  "query": {
    "match_all": {}
  },
  "aggs": {
    "NAME": {
      "terms": {
        "field": "user",
        "size": 10
      }
    }
  }
}

4.2 aggs cardinality

GET index_name/?search
{
  "track_total_hits": true,
  "query": {
    "match_all": {}
  },
  "aggs": {
    "NAME": {
      "cardinality": {
        "field": "user"
      }
    }
  }
}

4.3 aggs value_count

GET index_name/?search
{
  "track_total_hits": true,
  "query": {
    "match_all": {}
  },
  "aggs": {
    "NAME": {
      "value_count": {
        "field": "user"
      }
    }
  }
}

4.4 aggs terms+script

GET index_name/?search
{
  "track_total_hits": true,
  "query": {
    "match_all": {}
  },
  "aggs": {
    "NAME": {
      "terms": {
        "script": "doc['user'] +'####'+ doc['ip']",
        "size": 1000
      }
    }
  }
}

4.5 aggs多重组合

GET index_name/?search
{
  "track_total_hits": true,
  "query": {
    "match_all": {}
  },
  "aggs": {
    "NAME": {
      "terms": {
        "field": "user",
        "size": 10
      },
      "aggs": {
        "NAME": {
          "terms": {
            "script": "doc['ip'] +'####'+ doc['address']",
            "size": 1000
          }
        }
      }
    }
  }
}

4.6 aggs语句参数解析

   这些聚合语句可以根据具体的需求进行组合和嵌套,以实现更复杂的统计和分析操作。通过使用这些聚合语句,可以从查询结果中提取有用的统计信息,进行数据分析、可视化和业务洞察。

terms聚合:按字段进行分组,并统计每个分组的文档数量。
date_histogram聚合:按时间间隔对日期字段进行分组,并统计每个时间间隔内的文档数量。
range聚合:将字段的值划分为不同的范围,并统计每个范围内的文档数量。
histogram聚合:将数值字段的值划分为不同的区间,并统计每个区间内的文档数量。
avg聚合:计算数值字段的平均值。
sum聚合:计算数值字段的总和。
min聚合:找到数值字段的最小值。
max聚合:找到数值字段的最大值。
cardinality聚合:计算字段的基数(不重复值的数量)。
top_hits聚合:返回每个分组中的顶部文档。
extended_stats聚合:计算数值字段的统计信息,包括平均值、标准差、最小值、最大值等。
percentiles聚合:计算数值字段的百分位数。
geo_distance聚合:按地理距离对地理坐标字段进行分组,并统计每个距离范围内的文档数量。
filter聚合:根据指定的过滤条件对文档进行聚合。
nested聚合:在嵌套的文档结构中进行聚合操作。
value_count聚合:计算某个字段的值的数量。
stats聚合:计算数值字段的统计信息,包括平均值、总和、最小值、最大值和文档数量。
scripted_metric聚合:使用自定义脚本计算聚合结果。

五、所遇到问题的解决方案

5.1 解决统计显示所有数量而不是10000问题

添加"track_total_hits": true

GET index_name/?search
{
	"track_total_hits": true, 
  "query": {
    "match_all": {
      
    }
  }
}

5.2 解决must与should同时使用must不生效问题

将should整个包装成must一个条件就能解决

GET index_name/?search
{
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "should": [
              {
                "wildcard": {
                  "user": "*Yi*"
                }
              },
              {
                "wildcard": {
                  "user": "*龙*"
                }
              },
              {
                "wildcard": {
                  "user": "*虎*"
                }
              }
            ]
          }
        }
      ]
    }
  },
  "size": 10000
}

六、总结

   无论您是数据分析师、开发人员还是与Elasticsearch相关的岗位,了解和掌握ES DSL查询语句都是非常重要的,掌握这些强大的查询工具,为您的工作带来更多的效率和成果。微信公众号搜索关注艺说IT,分享各种原创技术干货文章,对你有用的话请一键三连,感谢🙏
工作常用ES DSL查询语句(干货满满),数据库,elasticsearch文章来源地址https://www.toymoban.com/news/detail-781515.html

到了这里,关于工作常用ES DSL查询语句(干货满满)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Elasticsearch之常用DSL语句

    目录   1. Elasticsearch之常用DSL语句 1.1 操作索引 1.2 文档操作 1.3 DSL查询 1.4 搜索结果处理 1.5 数据聚合   mapping是对索引库中文档的约束,常见的mapping属性包括: - type:字段数据类型,常见的简单类型有:   - 字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家

    2024年02月04日
    浏览(11)
  • ES 文档查询 之 DSL

    ES 文档查询 之 DSL

    ES支持一种JSON格式的查询,叫做DSL, domain specific language   DSL 官方文档地址:Query DSL | Elasticsearch Guide [7.17] | Elastic 练习   match查询   multi-match查询   term查询  精确查询不会对我们查询内容进行分词,完全匹配才回命中。 range查询   gt : greater than 大于      gte : greater than e

    2023年04月19日
    浏览(9)
  • ES几个比较重要的DSL语句(修改索引名字、等)

    查询所有索引 GET _cat/indices 查询对应索引数据结构 GET /索引名/_mapping 查询对应索引的数据条数 GET /索引名/_count 查询对应索引的所有数据(ES 展示有限,只会展示部分,如果需要查询多条看下面) GET /索引名/_search 查询对应索引的指定数量数据 修改ES索引名字 方法一、更换名

    2024年02月12日
    浏览(7)
  • ElasticSearch DSL语句(bool查询、算分控制、地理查询、排序、分页、高亮等)

    ElasticSearch DSL语句(bool查询、算分控制、地理查询、排序、分页、高亮等)

    查询所有:查询所有数据,一般在测试时使用。march_all,但是一般显示全部,有一个分页的功能 全文检索(full text)查询:利用分词器对用户的输入内容进行分词,然后去倒排索引库匹配。例如: match_query mutil_match_query 精确查询:根据精确词条值查询数据,一般查找的时k

    2024年02月12日
    浏览(13)
  • SpringCloud(十)——ElasticSearch简单了解(二)DSL查询语句及RestClient查询文档

    SpringCloud(十)——ElasticSearch简单了解(二)DSL查询语句及RestClient查询文档

    查询所有 :查询出所有数据,一般测试用。例如: match_all 全文检索查询 :利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如: match_query multi_match_query 精确查询 :根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如: ids range

    2024年02月10日
    浏览(10)
  • ES6-ES11最通俗易懂保姆级的笔记!人见人爱,花见花开。赶快动起你发财的小手收藏起来吧,满满的干货,你值得拥有!!

    ES6-ES11最通俗易懂保姆级的笔记!人见人爱,花见花开。赶快动起你发财的小手收藏起来吧,满满的干货,你值得拥有!!

    1.  ES6 1.1  let变量声明以及声明特性 声明变量 特性: 变量不能重复声明 块级作用域 全局、函数、eval 不仅仅针对花括号,if else while for中都是块级作用域 不存在变量提升 不影响作用域链  案例 1.2  const声明常量以及特点 常量声明 特性: 一定要赋初始值 一般变量使用大

    2024年02月09日
    浏览(12)
  • ES高级查询语法DSL实战 - 第504篇

    ES高级查询语法DSL实战 - 第504篇

    历史文章( 文章 累计500+) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《国内最全的Spring Boot系列之七》 E

    2024年04月27日
    浏览(10)
  • 一文掌握系列之Es的DSL查询操作

    ES在查询的时候非常方便, 笔者总结了Es的基础查询操作,供大家指正和学习。 match_all 全部查询,配合其他的操作进行数据的筛选,字段的筛选等,并且伴随着条件的增加,建议使用POST方式, 筛选字段 _source对需要的字段进行筛选。 分页 from a size b 拿到目的集合中索引为

    2023年04月12日
    浏览(8)
  • 常用的Elasticsearch查询DSL

    1.基本查询 2.多条件查询 3.范围查询 4.复杂查询 5.聚合查询

    2024年02月12日
    浏览(12)
  • 【ES专题】ElasticSearch 高级查询语法Query DSL实战

    【ES专题】ElasticSearch 高级查询语法Query DSL实战

    个人在学习的过程中,感觉比较吃力的地方有如下: 语法结构比较陌生 没有中文文档, 只能看英文 其他博客也比较少介绍语法结构。比如说,为什么查询中会出现 query 有ES入门基础,且想进一步学习ES基本操作的朋友 系列上一篇文章:《【ES专题】ElasticSearch快速入

    2024年02月06日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包