首页 > 其他分享 >ElasticSearch 实战:ElasticSearch文档多条件查询

ElasticSearch 实战:ElasticSearch文档多条件查询

时间:2024-04-02 10:31:00浏览次数:14  
标签:实战 title price 查询 文档 ElasticSearch Elasticsearch must

Elasticsearch 实战:Elasticsearch 文档多条件查询

在实际应用中,常常需要根据多个条件对文档进行筛选。Elasticsearch 提供了多种查询类型和查询组合机制,支持构建复杂的多条件查询。以下是如何进行文档多条件查询的详细步骤:

**1. **布尔查询(Bool Query)

布尔查询是构建多条件查询最常用且最强大的工具。它允许将多个查询条件以 must(逻辑 AND)、should(逻辑 OR)、must_not(逻辑 NOT)的形式组合在一起。例如,查找标题包含 “Elasticsearch” 且价格小于 .png 的书籍,但不包含作者 “Zachary Tong”:

GET /my_index/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "Elasticsearch" } },
        { "range": { "price": { "lt": .jpg } } }
      ],
      "must_not": [
        { "term": { "author": "Zachary Tong" } }
      ]
    }
  }
}

**2. **复合查询(Compound Queries)

除了布尔查询,Elasticsearch 还提供了其他复合查询类型,如 constant_score(为子查询赋予固定分数)、dis_max(返回子查询中得分最高的文档)、function_score(根据自定义函数计算分数)等。根据业务需求,可以选择合适的复合查询类型。

**3. **嵌套对象查询

对于包含嵌套对象的文档,可以使用嵌套查询(Nested Query)或父子关系查询(Parent-Child Query)来处理多条件查询。例如,一个文档结构包含多个评论(nested object),要查找包含特定用户评论且该评论点赞数大于 10 的文档:

GET /my_index/_search
{
  "query": {
    "nested": {
      "path": "comments",
      "query": {
        "bool": {
          "must": [
            { "term": { "comments.user": "user1" } },
            { "range": { "comments.likes": { "gt": 10 } } }
          ]
        }
      }
    }
  }
}

**4. **脚本查询(Script Query)

通过编写脚本,可以实现更复杂的条件判断。例如,查找价格低于平均价格的文档:

GET /my_index/_search
{
  "query": {
    "bool": {
      "filter": {
        "script": {
          "script": {
            "source": """
              double avgPrice = doc['price'].value;
              return avgPrice < params.targetPrice;
            """,
            "params": {
              "targetPrice": 50.0
            }
          }
        }
      }
    }
  }
}

**5. **查询模板(Query Template)

对于经常使用的多条件查询,可以预先定义查询模板,通过参数化查询来简化请求构造。查询模板使用 Mustache 语法,允许在运行时插入动态参数。例如,定义一个模板:

PUT _scripts/multi_condition_template
{
  "script": {
    "lang": "mustache",
    "source": """
      {
        "query": {
          "bool": {
            "must": [
              {{#title}}{ "match": { "title": "{{title}}" } },{{/title}}
              {{#price}}{ "range": { "price": { "gte": {{price}}, "lte": {{price_max}} } } },{{/price}}
              {{#author}}{ "term": { "author": "{{author}}" } }{{/author}}
            ]
          }
        }
      }
    """
  }
}

然后使用模板执行查询:

GET /my_index/_search/template
{
  "id": "multi_condition_template",
  "params": {
    "title": "Elasticsearch",
    "price": 50,
    "price_max": 100,
    "author": "Clintongormley"
  }
}

通过灵活运用布尔查询、复合查询、嵌套对象查询、脚本查询以及查询模板,您可以构建出满足复杂业务需求的多条件查询语句。在实际应用中,应结合数据模型和查询场景选择最适合的查询类型和参数,以实现高效准确的数据检索。同时,关注查询性能,适时进行查询优化。

标签:实战,title,price,查询,文档,ElasticSearch,Elasticsearch,must
From: https://blog.csdn.net/qq_33240556/article/details/137222761

相关文章

  • Quill文档(四):使用Parchment克隆Medium
    为了提供一致的编辑体验,您需要一致的数据和可预测的行为。不幸的是,DOM缺乏这两个特性。现代编辑器的解决方案是维护自己的文档模型来表示它们的内容。对于Quill来说,Parchment就是这样的解决方案。它在自己的代码库中组织,并拥有自己的API层。通过Parchment,您可以定制Quill识别......
  • Quill文档(三):构建自定义模块
    Quill作为编辑器的核心优势在于其丰富的API和强大的定制能力。当您在Quill的API之上实现功能时,将其组织为一个模块可能会很方便。为了本指南的目的,我们将逐步介绍一种构建单词计数器模块的方法,这是许多文字处理器中常见的功能。注意在内部,模块是Quill的许多功能的组织方......
  • 【附源码】JAVA计算机毕业设计汪汪喵宠物寄养中心系统设计与开发(源码+mysql+文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着社会的发展和人们生活水平的提高,宠物已经成为越来越多家庭的重要成员。人们对宠物的关爱和投入也越来越多,这导致了宠物服务行业的迅速发展。其中,宠......
  • 【附源码】JAVA计算机毕业设计网上扶贫农产品销售系统(源码+mysql+文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义随着互联网技术的迅速发展,传统的农产品销售模式已经不能满足现代消费者的需求。尤其是在扶贫领域,由于地理位置偏远、信息不对称等因素,贫困地区的农产品往往难以打......
  • 【附源码】JAVA计算机毕业设计网络安全知识学习系统(源码+mysql+文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在信息技术飞速发展的今天,网络安全已经成为社会关注的热点问题。随着网络应用的普及和互联网技术的不断进步,网络攻击、数据泄露、恶意软件等安全威胁日......
  • 【附源码】JAVA计算机毕业设计网上购物系统(源码+mysql+文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的飞速发展,电子商务已经成为现代商业交易中不可或缺的一部分。网上购物系统作为电子商务平台的典型代表,以其便捷性、高效性和丰富的商品......
  • 【附源码】JAVA计算机毕业设计网上购物中心(源码+mysql+文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的飞速发展,电子商务已成为现代社会中不可或缺的一部分。网络购物因其便捷性、高效性和多样性,受到了广大消费者的喜爱。传统的购物方式需......
  • 【附源码】JAVA计算机毕业设计网上花店系统(源码+mysql+文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的飞速发展,电子商务已经成为现代社会中一个重要的商业活动形式。网络购物作为电子商务的重要组成部分,以其方便快捷的特点深受广大消费者......
  • 【附源码】JAVA计算机毕业设计网上图书销售系统(源码+mysql+文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的飞速发展,电子商务已经成为现代社会中不可或缺的一部分。在线购物系统因其方便快捷的特点被广大消费者接受和喜爱。特别是在图书行业,网......
  • 【InternLM实战营---第二节课笔记】
    一、本期课程内容概述本节课的主讲老师是角色扮演SIG小组长任宇鹏。教学内容主要包括以下四个部分:部署InternLM2-Chat-1.8B模型进行智能对话部署实战营优秀作品八戒-Chat-1.8B模型通过InternLM2-Chat-7B运行Lagent智能体Demo实践部署浦语·灵笔2模型二、学习......