首页 > 其他分享 >ES查询常用语法

ES查询常用语法

时间:2024-10-22 16:35:30浏览次数:6  
标签:term 匹配 xxxx 查询 语法 appId query ES

1. ElasticSearch之查询返回结果各字段含义
执行命令:索引库名称/_search
空搜索的结果为:

{
  "took": 2,        # 该命令请求花费了多长时间,单位:毫秒。
  "timed_out": false,        # 搜索是否超时
  "_shards": {        # 搜索分片信息
    "total": 3,        # 搜索分片总数
    "successful": 3,        # 搜索成功的分片数量
    "skipped": 0,        # 没有搜索的分片,跳过的分片
    "failed": 0        # 搜索失败的分片数量
  },
  "hits": {        # 搜索结果集。需要的一切数据都是从hits中获取
    "total": 21798,        # 返回多少条数据
    "max_score": 1,        #返回结果中,最大的匹配度分值
    "hits": [        # 默认查询前十条数据,根据分值降序排序,这里为了节省地方,把默认查询的前十条数据删了9条,只剩下一条数据
      {
        "_index": "",        # 索引库名称
        "_type": "",        # 类型名称
        "_id": "",        # 该条数据的id
        "_score": 1,        # 关键字与该条数据的匹配度分值
        "_routing": "",        # routing参数是一个可选参数,默认使用文档的_id值,用于计算文档所属分片
        "_source": {        # 索引库中类型,返回结果字段,不指定的话,默认全部显示出来
          "id": 1,
          "orderNo": "",
          "appId": "",
          "componentAppId": "",
          "settleNo": "",
          "outSettleNo": "",
          "settleAmount": 5,
          "orderAmount": 7,
          "settleStatus": 3,
          "paymentChannel": 1,
          "version": 2,
          "settleTime": ,
          "createTime": ,
          "updateTime": ,
          "promotionAccountId": "",
          "invoiceStatus": 1,
          "promotionTypeValue": 0,
          "commissionRateFeeCentAmount": 0,
          "commissionChargeFeeCentAmount": 0,
          "promotionFeeCentAmount": 2,
          "developerPromotionFeeCentAmount": 0,
          "promotionType": ""
        }
      }
    ]
  }
}

2. match 查询
匹配查询 match 是个核心查询。无论需要查询什么字段,match 查询都应该会是首选的查询方式。它是一个高级全文查询,这表示它既能处理全文字段(包括支持分词的字段),又能处理精确字段。
match 查询主要的应用场景就是进行全文搜索。

{
  "query": {
    "match": {
      "appId": "xxxx"
    }
  }
}

match本质上是对term组合,所以上面的语句换成term依然能够执行

{
  "query": {
    "term": {
      "appId": "xxxx"
    }
  }
}

3. term查询
term 查询,可以用它处理数字(numbers)、布尔值(Booleans)、日期(dates)以及文本(text)
用 term 搜索字符串时要将字段设置成 not_analyzed 无需分析的。不然es会将字符串进行分词,分词结果建立索引,在用term进行精确查找时找不到任何文档。
对应的 QueryBuilder class 是TermQueryBuilder,具体方法是 QueryBuilders.termQuery()

{
  "query": {
    "term": {
      "appId": "xxxx"
    }
  }
}

4. terms 查询
terms 查询允许指定多个值进行匹配。如果这个字段包含了指定值中的任何一个值,就表示该文档满足条件。 比如我们想要查找价格字段值为 $20 或 $30 的文档则可以使用terms。
按照单个分词term匹配,它们是or的关系。对应的 QueryBuilder class 是 TermsQueryBuilder,具体方法是 QueryBuilders.termsQuery()

{
  "query": {
    "terms": {
      "appId": ["xxxx", "xxxx"]
    }
  }
}

5. range 范围
常常被用在数字或者日期范围的查询,Search Query:Range;QueryBuilder Class:RangeQueryBuilder;Method in QueryBuilders:QueryBuilders.rangeQuery()

{
  "query": {
    "range": {
      "createTime": {
        "gte": 1661409996661,
        "lte": 1661409996661
      }
    }
  }
}

6. 布尔查询
通过布尔逻辑将较小的查询组合成较大的查询。
Bool查询语法有以下特点:子查询可以任意顺序出现、可以嵌套多个查询,包括bool查询、如果bool查询中没有must条件,should中必须至少满足一条才会返回结果。
bool查询包含四种操作符,分别是must,should,must_not,filter。他们均是一种数组,数组里面是对应的判断条件。
must: 必须匹配。贡献算分;
must_not:过滤子句,必须不能匹配,但不贡献算分;
should: 选择性匹配,至少满足一条。贡献算分;
filter: 过滤子句,必须匹配,但不贡献算分,所以比must会更快!

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "appId": "xxxx"
          }
        },
        {
          "term": {
            "paymentChannel": 1
          }
        },
        {
          "term": {
            "settleStatus": 3
          }
        },
        {
          "term": {
            "promotionAccountId": ""
          }
        },
        {
          "range": {
            "createTime": {
              "from": 1658741630780,
              "to": 1661420030780,
              "include_lower": true,
              "include_upper": true
            }
          }
        }
      ]
    }
  }
}

7. boosting query(提高查询)
用来控制(提高或降低)复合查询中子查询的权重。
不同于bool查询,bool查询中只要一个子查询条件不匹配那么搜索的数据就不会出现。而boosting query则是降低显示的权重/优先级(即score)。
比如搜索逻辑是 name = 'apple' and type ='fruit',对于只满足部分条件的数据,不是不显示,而是降低显示的优先级(即score)
~positive(积极的,加分):只有匹配上positive的查询的内容,才会被放到返回的结果集中。
~negative(消极的,减分):如果匹配上positive并且也匹配上了negative,就可以降低这样的文档score。
~negative_boost:指定系数,必须小于1.0 ,那么匹配到的内容会将分数乘以当前系数;(这是个系数,因为你要控制分数,那要怎么控制呢?就是乘以系数来控制分数大小)

{
  "query": {
    "boosting": {
      "positive": {
        "term": {
          "appId": "xxxx"
        }
      },
      "negative": {
        "term": {
          "orderNo": "xxxx"
        }
      },
      "negative_boost": 0.5
    }
  }
}

8. dis_max(最佳匹配查询)
dis_max query:叫做分离最大化查询,它会将任何与查询匹配的文档都作为结果返回,但是只是将其中最佳匹配的评分作为最终的评分返回。
dis_max 条件的计算分数:分数 = 第一个匹配条件分数 + tie_breaker * 第二个匹配的条件的分数 ...

  "query": {
    "dis_max": {
      "queries": [
        {
          "term": {
            "appId": "xxxx"
          }
        },
        {
          "term": {
            "paymentChannel": 1
          }
        },
        {
          "range": {
            "createTime": {
              "from": 1658741630780,
              "to": 1661420030780,
              "include_lower": true,
              "include_upper": true
            }
          }
        }
      ],
      "tie_breaker": 0
    }
  }

9. 分页
通过 from 和 size 就可以执行分页查询。from 指明了分页查询返回的结果的起始位置,而size参数则指明了分页查询的页容量。

{
  "from": 0,
  "size": 1,
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "appId": "xxxx"
          }
        },
        {
          "range": {
            "createTime": {
              "from": 1658741630780,
              "to": 1661420030780,
              "include_lower": true,
              "include_upper": true
            }
          }
        }
      ]
    }
  }
}

10. 聚合查询【内含实际的demo】
根据appId查询昨日结算成功的指定支付渠道的结算总金额

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "appId": "xxxx"
          }
        },
        {
          "term": {
            "paymentChannel": 1
          }
        },
        {
          "term": {
            "settleStatus": 3
          }
        },
        {
          "range": {
            "createTime": {
              "from": 1658741630780,
              "to": 1661420030780,
              "include_lower": true,
              "include_upper": true
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "total_amount": {
      "sum": {
        "field": "settleAmount"
      }
    }
  },
  "size": 0
}

 来源:https://blog.csdn.net/jiayoudangdang/article/details/128520075

标签:term,匹配,xxxx,查询,语法,appId,query,ES
From: https://www.cnblogs.com/xsj1989/p/18493230

相关文章

  • 基于模仿学习的自动泊车运动规划算法 ResNet+BERT分类模型
    本文使用ResNet+BERT分类模型来实现APA自动泊车算法首先定义模型的输出动作类别类别名说明S0停车S+直行前进单位距离S-直行后退单位距离L+左转前进单位角度L-左转后退单位角度R+右转前进单位角度R-右转后退单位角度设单位距离为0.05米,单位......
  • AbMole|Apilimod mesylate Apilimod甲磺酸盐(CAS号 870087-36-8;目录号M9418)
    Apilimodmesylate(STA5326mesylate,Apilimod甲磺酸盐)是Apilimod的甲磺酸盐形式,也是一种具有口服活性的IL-12/IL-23抑制剂,抑制IFN-γ/LPS刺激的人PBMC产生IL-12的IC50值为10nM。可用于难治性葡萄膜炎的相关研究。生物活性Apilimod甲磺酸盐是一种IL-12/IL-23抑制剂,抑制IFN-......
  • 【RL Latest Tech】自监督强化学习(SSL-RL):理论与方法
            ......
  • 【Rust Desk】手搓一个远程桌面软件,完全取代 向日葵、ToDesk!
    视频教程简介RustDesk是开源,可以100%平替向日葵、Todesk的项目,电脑控制电脑,电脑控制手机,手机控制电脑等功能全部都有,完全免费。第一步下载下载所需资料:【RustDesk服务端/客户端安装包】第二步安装服务端安装命令:sudodpkg-irustdesk-server-hbbs_1.1.11-1_......
  • CF2023D Many Games
    题目大意有\(n\)个二元组\((p_i,w_i)\),保证\(1\lep_i\le100,p_iw_i\le200000\),求一个集合\(S\),使得\(\prod_{i\inS}\frac{p_i}{100}\sum_{i\inS}w_i\)最大\[n\le200000\]题解考虑一个极大的集合有什么样的性质,所谓极大就是不能够通过加入一个元素使得答案更大设集合为\(S......
  • vuex中 namespace关键词是什么含义
    在Vuex中,namespace是一个非常重要的概念,它用于组织和隔离模块的状态、突变(mutations)、动作(actions)和getter。使用namespace可以避免模块之间的命名冲突,并使得状态管理更加清晰和可维护。1.什么是命名空间(Namespace)在Vuex中,每个模块都可以设置为命名空间模式。通过设置......
  • Operation Fake Waves(赝波行动)
    OperationFakeWaves(赝波行动)——塞壬唱片-MSR/ErikCastro/DavidLin/SkylarFunkThisain’tfortheweaklinksorthefaintofheartThefoescomingupaheadareboundtomakeamarkOnourfacesthey’llbeleavingscarsOnourgraveshere’swhatthey’......
  • 在网络图中什么是ES、EF、LS、LF、TF、FF
    在项目管理中的网络图中,ES(EarlyStart)、EF(EarlyFinish)、LS(LateStart)、LF(LateFinish)、TF(TotalFloat)和FF(FreeFloat)是关键路径方法(CriticalPathMethod,CPM)中用于描述活动和事件时间的重要概念。1.在网络图中ES、EF、LS、LF、TF、FF的基本介绍在项目管理和工程学中,网络图是......
  • resilience4j
    目录配置属性说明yaml注解配置属性说明yaml#重试器配置resilience4j.retry:instances:callback:#最大重试次数maxAttempts:5#重试间隔的时间waitDuration:10s#表示在重试策略中启用指数退避。这意味着在每次重试之间,重试操......
  • django源码基于Python网络爬虫的电子产品信息查询数据可视化分析系统
    目录具体实现截图源码获取地址下载预期达到的目标技术栈编码规范开发技术介绍系统的稳定性和可维护性核心代码部分展示具体实现截图源码获取地址下载点击获取–>下载本项目源码数据库预期达到的目标1、学习系统开发和设计的技术相关知识和工作流程;2、学习使......