首页 > 其他分享 >【Elasticsearch复合查询】

【Elasticsearch复合查询】

时间:2025-01-14 10:33:01浏览次数:3  
标签:匹配 复合 查询 filter 文档 子句 Elasticsearch must

Elasticsearch复合查询

在Elasticsearch中,复合查询(Compound Queries)是用来封装其他复合查询或叶子查询的查询类型。它们的主要目的是组合这些查询的结果和分数、改变它们的行为或者从查询上下文切换到过滤上下文。

一个常见的复合查询是bool查询,它允许你通过布尔逻辑组合多个查询条件。bool查询包含以下几种子句:

  • must: 文档必须匹配所有must子句下的查询条件,并且这些匹配会影响到文档的相关性评分。
  • should: 文档可以匹配should子句下的一个或多个查询条件,这会增加文档的相关性评分。如果没有任何must子句存在,至少需要满足一个should子句。
  • must_not: 文档不能匹配任何must_not子句下的查询条件。这个子句不会影响评分,它的作用是排除不相关的文档。
  • filter: 文档必须匹配filter子句下的查询条件,但与must不同的是,filter子句不会影响文档的评分,只起到过滤的作用。

除了bool查询之外,还有其他的复合查询类型,例如:

  • constant_score 查询:将原始查询转换为不计算评分的过滤查询,并给所有匹配的文档赋予相同的评分。
  • dis_max 查询:用于指定一个查询中的多个子查询,并返回那些单个最佳匹配子查询得分最高的文档。
  • function_score 查询:允许你修改查询结果的评分,可以通过定义不同的函数来调整最终的评分。

代码示例

1. bool 查询

bool 查询是使用最广泛的复合查询之一。它允许你通过布尔逻辑组合多个查询条件。

  • must: 文档必须匹配这些条件,相当于 AND。
  • filter: 必须匹配,但不计算相关性分数。
  • should: 文档应该匹配这些条件中的至少一个,增加其相关性分数。
  • must_not: 文档不能匹配这些条件。

示例代码:

{
  "query": {
    "bool" : {
      "must" : {
        "term" : { "user" : "kimchy" }
      },
      "filter": {
        "term" : { "tag" : "tech" }
      },
      "must_not" : {
        "range" : {
          "age" : { "from" : 10, "to" : 20 }
        }
      },
      "should" : [
        { "term" : { "comment" : "cool" } },
        { "term" : { "comment" : "wonderful" } }
      ]
    }
  }
}
2. dis_max 查询

dis_max 查询会选择单个最佳匹配的查询子句来计算最终分数,而不是像 bool 查询那样合并所有匹配子句的分数。

示例代码:

{
  "query": {
    "dis_max" : {
      "queries" : [
        { "match" : { "title" : "Quick pets" }},
        { "match" : { "body" : "Quick pets" }}
      ],
      "tie_breaker" : 0.7
    }
  }
}
3. function_score 查询

function_score 允许你修改查询结果的评分,根据特定的函数调整每个文档的最终评分。

示例代码:

{
  "query": {
    "function_score": {
      "query": { "match_all": {} },
      "functions": [
        {
          "filter": { "match": { "test": "bar" }},
          "weight": 23
        },
        {
          "filter": { "match": { "test": "cat" }},
          "weight": 42
        }
      ],
      "score_mode": "max",
      "boost_mode": "multiply"
    }
  }
}

使用复合查询可以帮助你构建复杂的搜索逻辑,以精确地控制哪些文档应该被检索出来以及如何对它们进行排序。根据你的具体需求,你可以选择合适的复合查询类型来实现你的查询目标。

标签:匹配,复合,查询,filter,文档,子句,Elasticsearch,must
From: https://blog.csdn.net/qq_44734705/article/details/145132497

相关文章

  • HTML学习笔记记录---速预CSS(2) 复合属性、盒子模型、边框线、浮动、定位
    复合属性写法:{font:font-stylefont-weitghtfont-size/line-heightfont-family}{font:样式粗细字号字体}(书写瞬间为固定的不可更改)block         块级元素      divinline         行内元素      spaninline-block ......
  • SELECT使用子查询
    目录1、子查询2、利用子查询进行过滤3、作为计算字段使用子查询4、小结1、子查询SELECT语句是SQL的查询。我们迄今为止所看到的所有SELECT语句都是简单查询,即从单个数据库表中检索数据的单条语句。查询(query):任何SQL语句都是查询。但此术语一般指SELECT语......
  • 树状数组【单点修改+区间查询】+二分
    https://codeforces.com/gym/580226/problem/H#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'#definelowbit(x)x&(-x)usingll=longlong;usingpii=pair<int,int>;constdoublePI=acos(-1);constintN=2e5......
  • ElasticSearch在Windows环境搭建&测试
    引子也持续关注大数据相关内容一段时间,大数据内容很多。想了下还是从目前项目需求侧出发,进行相关学习。Elasticsearch(ES)是位于ElasticStack(ELKstack)核心的分布式搜索和分析引擎。Logstash和Beats有助于收集、聚合和丰富您的数据并将其存储在Elasticsearch中。Kibana使......
  • 树状数组【区间修改+单点查询】
    https://www.luogu.com.cn/problem/P3368#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'#definelowbit(x)x&(-x)usingll=longlong;usingpii=pair<int,int>;constdoublePI=acos(-1);constintN=5e5+10......
  • MySQL不使用子查询的原因
    MySQL不使用子查询的原因及优化案例目录MySQL不使用子查询的原因及优化案例目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EXISTS优化子查询案例3:使用JOIN代替子查询案例4:优化子查询以减少数据量案例5:使用索引覆盖案例6:使用......
  • java校园网学生成绩查询系统论文+源码 2025毕设
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着校园规模的不断扩大和教育信息化的快速发展,校园网内的数据量急剧增加,其中学生成绩相关信息的管理和查询成为一个重要的需求领域。传统的成绩......
  • 【Elasticsearch】 复合查询
    ......
  • elasticsearch7介绍和基础语法
    elasticsearch7介绍和基础语法参考博客:https://blog.csdn.net/qq_47387991/article/details/129349790什么是elasticsearch?一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能。开源分布式搜索引擎elasticsearch底层是基于lucene来实现的。L......
  • Elasticsearch:向量数据库基础设施类别的兴衰
    过去几年,我一直在观察嵌入技术如何从大型科技公司的“秘密武器”转变为日常开发人员工具。接下来发生的事情——向量数据库淘金热、RAG炒作周期以及最终的修正——教会了我们关于新技术如何在更广泛的生态系统中找到一席之地的宝贵经验。更多有关向量搜索及结合传统搜......