1. 建立连接

  1. from elasticsearch import Elasticsearch
  2. es = Elasticsearch(["localhost:9200"])

2. 查询所有数据


  1. # 方式1:
  2. es.search(index="index_name", doc_type="type_name")
  3. # 方式2:
  4. body = {
  5. "query":{
  6. "match_all":{}
  7. }
  8. }
  9. es.search(index="index_name", doc_type="type_name", body=body)

3. 等于查询,term与terms

  1. # term: 查询 xx = “xx”
  2. body = {
  3. "query":{
  4. "term":{
  5. "name":"python"
  6. }
  7. }
  8. }
  9. # 查询name="python"的所有数据
  10. es.search(index="index_name",doc_type="type_name",body=body)
  11. # terms: 查询 xx = “xx” 或 xx = “yy”
  12. body = {
  13. "query":{
  14. "terms":{
  15. "name":[
  16. "ios","android"
  17. ]
  18. }
  19. }
  20. }
  21. # 查询出name="ios"或name="android"的所有数据
  22. es.search(index="index_name",doc_type="type_name",body=body)

4. 包含查询,match与multi_match

  1. # match: 匹配name包含"python"关键字的数据
  2. body = {
  3. "query":{
  4. "match":{
  5. "name":"python"
  6. }
  7. }
  8. }
  9. # 查询name包含python关键字的数据
  10. es.search(index="index_name",doc_type="type_name",body=body)
  11. # multi_match: 在name和addr里匹配包含深圳关键字的数据
  12. body = {
  13. "query":{
  14. "multi_match":{
  15. "query":"深圳",
  16. "fields":["name", "addr"]
  17. }
  18. }
  19. }
  20. # 查询name和addr包含"深圳"关键字的数据
  21. es.search(index="index_name",doc_type="type_name",body=body)

5. ids

  1. body = {
  2. "query":{
  3. "ids":{
  4. "type":"type_name",
  5. "values":[
  6. "1","2"
  7. ]
  8. }
  9. }
  10. }
  11. # 搜索出id为1或2的所有数据
  12. es.search(index="index_name",doc_type="type_name",body=body)

6. 复合查询bool

bool有3类查询关系,must(都满足),should(其中一个满足),must_not(都不满足)

  1. body = {
  2. "query":{
  3. "bool":{
  4. "must":[
  5. {
  6. "term":{
  7. "name":"python"
  8. }
  9. },
  10. {
  11. "term":{
  12. "age":18
  13. }
  14. }
  15. ]
  16. }
  17. }
  18. }
  19. # 获取name="python"并且age=18的所有数据
  20. es.search(index="index_name",doc_type="type_name",body=body)

7. 切片式查询

  1. body = {
  2. "query":{
  3. "match_all":{}
  4. }
  5. "from":2 # 从第二条数据开始
  6. "size":4 # 获取4条数据
  7. }
  8. # 从第2条数据开始,获取4条数据
  9. es.search(index="index_name",doc_type="type_name",body=body)

8. 范围查询

  1. body = {
  2. "query":{
  3. "range":{
  4. "age":{
  5. "gte":18, # >=18
  6. "lte":30 # <=30
  7. }
  8. }
  9. }
  10. }
  11. # 查询18<=age<=30的所有数据
  12. es.search(index="index_name",doc_type="type_name",body=body)

9. 前缀查询

  1. body = {
  2. "query":{
  3. "prefix":{
  4. "name":"p"
  5. }
  6. }
  7. }
  8. # 查询前缀为"赵"的所有数据
  9. es.search(index="index_name",doc_type="type_name",body=body)

10. 通配符查询

  1. body = {
  2. "query":{
  3. "wildcard":{
  4. "name":"*id"
  5. }
  6. }
  7. }
  8. # 查询name以id为后缀的所有数据
  9. es.search(index="index_name",doc_type="type_name",body=body)

11. 排序

  1. body = {
  2. "query":{
  3. "match_all":{}
  4. }
  5. "sort":{
  6. "age":{ # 根据age字段升序排序
  7. "order":"asc" # asc升序,desc降序
  8. }
  9. }
  10. }
  11. # 多字段排序,注意顺序!写在前面的优先排序
  12. body = {
  13. "query":{
  14. "match_all":{}
  15. }
  16. "sort":[{
  17. "age":{ # 先根据age字段升序排序
  18. "order":"asc" # asc升序,desc降序
  19. }
  20. },{
  21. "name":{ # 后根据name字段升序排序
  22. "order":"asc" # asc升序,desc降序
  23. }
  24. }],
  25. }

12. filter_path, 响应过滤

  1. # 只需要获取_id数据,多个条件用逗号隔开
  2. es.search(index="index_name",doc_type="type_name",filter_path=["hits.hits._id"])
  3. # 获取所有数据
  4. es.search(index="index_name",doc_type="type_name",filter_path=["hits.hits._*"])

13. count, 执行查询并获取该查询的匹配数

  1. # 获取数据量
  2. es.count(index="index_name",doc_type="type_name")

14. 度量类聚合

14.1. 获取最小值
  1. body = {
  2. "query":{
  3. "match_all":{}
  4. },
  5. "aggs":{ # 聚合查询
  6. "min_age":{ # 最小值的key
  7. "min":{ # 最小
  8. "field":"age" # 查询"age"的最小值
  9. }
  10. }
  11. }
  12. }
  13. # 搜索所有数据,并获取age最小的值
  14. es.search(index="index_name",doc_type="type_name",body=body)
14.2. 获取最大值
  1. body = {
  2. "query":{
  3. "match_all":{}
  4. },
  5. "aggs":{ # 聚合查询
  6. "max_age":{ # 最大值的key
  7. "max":{ # 最大
  8. "field":"age" # 查询"age"的最大值
  9. }
  10. }
  11. }
  12. }
  13. # 搜索所有数据,并获取age最大的值
  14. es.search(index="index_name",doc_type="type_name",body=body)
14.3. 获取和
  1. body = {
  2. "query":{
  3. "match_all":{}
  4. },
  5. "aggs":{ # 聚合查询
  6. "sum_age":{ # 和的key
  7. "sum":{ # 和
  8. "field":"age" # 获取所有age的和
  9. }
  10. }
  11. }
  12. }
  13. # 搜索所有数据,并获取所有age的和
  14. es.search(index="index_name",doc_type="type_name",body=body)
14.4. 获取平均值
  1. body = {
  2. "query":{
  3. "match_all":{}
  4. },
  5. "aggs":{ # 聚合查询
  6. "avg_age":{ # 平均值的key
  7. "sum":{ # 平均值
  8. "field":"age" # 获取所有age的平均值
  9. }
  10. }
  11. }
  12. }
  13. # 搜索所有数据,获取所有age的平均值
  14. es.search(index="index_name",doc_type="type_name",body=body)

15. from、size

  1. from:从“第几条”开始查询
  2. size:查询多少条
  1. body = {
  2. "query":{
  3. "match_all":{}
  4. },
  5. "size":"50",
  6. "from":"0"
  7. }

原文连接:

  1. https://blog.csdn.net/y472360651/article/details/76652021
  2. https://blog.csdn.net/m_z_g_y/article/details/82628972

es查询示例的更多相关文章

  1. Elasticsearch 邻近查询示例

    Elasticsearch 邻近查询示例(全切分分词) JAVA API方式: SpanNearQueryBuilder span = QueryBuilders.spanNearQuery(); s ...

  2. .NetCore下ES查询驱动 PlainElastic .Net 升级官方驱动 Elasticsearch .Net

    1.背景 由于历史原因,笔者所在的公司原有的ES查询驱动采用的是 PlainElastic.Net, 经过询问原来是之前PlainElastic.Net在园子里文档较多,上手比较容易,所以最初作者选用 ...

  3. Elasticsearch .Net Client NEST 多条件查询示例

    Elasticsearch .Net Client NEST 多条件查询示例 /// <summary> /// 多条件搜索例子 /// </summary> public c ...

  4. NHibernate查询示例合集

    基本查询   复杂查询示例 /// <summary> /// 获取自定义表单数据中属于部门的部分 /// </summary> /// <param name=&quo ...

  5. ElasticSearch 学习记录之ES查询添加排序字段和使用missing或existing字段查询

    ES添加排序 在默认的情况下,ES 是根据文档的得分score来进行文档额排序的.但是自己可以根据自己的针对一些字段进行排序.就像下面的查询脚本一样.下面的这个查询是根据productid这个值进行排 ...

  6. MyBatis 查询示例

    环境搭建 数据库schema 1)datasource.xml配置 <?xml version="1.0" encoding="UTF-8"?> & ...

  7. spring boot - 整合jpa多对对关系保存和查询示例

    pojo: package com.example.zs.springDataJpa; import org.hibernate.annotations.Proxy; import javax.per ...

  8. ES查询之刨根问底

    昨天有一个需求,就是想要根据某个网关url做过滤,获取其下面所有的上下文nginx日志:如果直接"query":"https://XXX/YYY/ZZZ"发现有 ...

  9. elasticsearch 简单聚合查询示例

    因为懒癌犯了,查询语句使用的截图而不是文字,导致了发布随笔的时候提示少于150字的随笔不能发布. 我就很郁闷了. 下面的查询都是前段时间工作中使用过的查询语句. 开始的时候是使用nodejs构建es查 ...

随机推荐

  1. Tensorflow简单实践系列(二):张量

    在上一节中,我们安装 TensorFlow 并运行了最简单的应用,这节我们熟悉 TensorFlow 中的张量. 张量是 TensorFlow 的核心数据类型.数学里面也有张量的概念,但是 Tenso ...

  2. dfs 之 下一个排列

    52. 下一个排列 中文English 给定一个整数数组来表示排列,找出其之后的一个排列. Example 例1: 输入:[1] 输出:[1] 例2: 输入:[1,3,2,3] 输出:[1,3,3,2 ...

  3. 一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系

    以下内容都是针对Pytorch 1.0-1.1介绍. 很多文章都是从Dataset等对象自下往上进行介绍,但是对于初学者而言,其实这并不好理解,因为有的时候会不自觉地陷入到一些细枝末节中去,而不能把握 ...

  4. ImportError: No module named wx

    先检查下Python中是否有此模块 $ python >>> import wx ImportError: No module named wx  wx模块的确没有安装. 要安装wx ...

  5. C# 中静态调用C++dll 和C# 中动态调用C++dll

    在最近的项目中,牵涉到项目源代码保密问题,由于代码是C#写的,容易被反编译,因此决定抽取核心算法部分使用C++编写,C++到目前为止好像还不能被很好的反编译,当然如果你是反汇编高手的话,也许还是有可能 ...

  6. ArcGIS 生成要素轮廓线掩膜

    先说效果: 生成轮廓之前:

  7. oracle彻底删除干净

    Oracle数据库的安装这里就不说了,网上应该有很多,但是oracle数据库的卸载却找不到一个比较详细的完整卸载的说明.很多卸载不完全,会有遗留数据,影响后续的安装.所以自己整理一份以前上学的时候学习 ...

  8. Servlet/Tomcat/ Spring 之间的关系

    0.基础知识 在idea中打开servlet的源码: 可以看见servlet就是一个接口:接口就是规定了一些规范,使得一些具有某些共性的类都能实现这个接口,从而都遵循某些规范. 有的人往往以为就是se ...

  9. Nested List Weight Sum

    Description Given a nested list of integers, return the sum of all integers in the list weighted by ...

  10. 11.2Test

    11.2Test 题目 描述 做法 \(BSOJ6367\) 求一个字符串内出现最多长度为\(K\)的子串 定长\(Hash\) \(BSOJ6368\) 给出数列\(a_{i+2}=ka_{i+1} ...