首页 > 其他分享 >【详解】ElasticSearchQuery查询方式

【详解】ElasticSearchQuery查询方式

时间:2024-12-29 21:26:24浏览次数:3  
标签:ElasticSearchQuery product sum 查询 详解 Query total self

目录

Elasticsearch Query查询方式

1. Match Query(匹配查询)

2. Term Query(精确查询)

3. Range Query(范围查询)

4. Bool Query(布尔查询)

5. 其他查询方式

结论


Elasticsearch Query查询方式

Elasticsearch(ES)是一个基于Lucene的高性能、分布式、开源搜索引擎,提供了多种灵活的查询方式以满足不同场景下的需求。在本文中,我们将深入探讨Elasticsearch的查询方式,并通过实例展示其用法。

1. Match Query(匹配查询)

Match Query是最常用的查询方式之一,它根据字段中的内容进行全文匹配查询。当你需要对某个字段进行全文检索时,可以使用match查询。

示例

GET /products/_search
{
  "query": {
    "match": {
      "product_name": "laptop"
    }
  }
}

上述查询将在​​product_name​​字段中搜索包含“laptop”的文档。

2. Term Query(精确查询)

Term Query用于精确匹配字段中的值。它适用于keyword类型字段或已经进行过分词处理的字段。

示例

GET /products/_search
{
  "query": {
    "term": {
      "category": "electronics"
    }
  }
}

这个查询将返回​​category​​字段值为“electronics”的文档。

3. Range Query(范围查询)

Range Query允许你根据字段的范围值进行查询,如数字或日期范围。你可以使用gt(大于)、gte(大于等于)、lt(小于)和lte(小于等于)等操作符来定义范围。

示例

GET /products/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 100,
        "lte": 500
      }
    }
  }
}

上述查询将返回价格在100到500之间的产品文档。

4. Bool Query(布尔查询)

Bool Query通过组合多个查询条件来实现更复杂的查询逻辑。你可以使用must(必须匹配)、must_not(必须不匹配)和should(应该匹配)等子句来构建查询。

示例

GET /products/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "product_name": "laptop" }},
        { "term": { "category": "electronics" }}
      ],
      "must_not": [
        { "range": { "price": { "gte": 2000 }}}
      ],
      "should": [
        { "match": { "description": "lightweight" }},
        { "match": { "tags": "portable" }}
      ]
    }
  }
}

这个查询将返回满足以下条件的产品文档:产品名称包含“laptop”,类别为“electronics”,价格小于2000,并且描述包含“lightweight”或标签包含“portable”。

5. 其他查询方式

除了上述查询方式外,Elasticsearch还提供了许多其他查询方式,如:

  • Match Phrase Query:用于匹配字段中连续的短语。
  • Prefix Query:根据字段的前缀进行查询。
  • Wildcard Query:使用通配符模式进行查询。
  • Fuzzy Query:根据字段中的模糊匹配进行查询。
  • Nested Query:用于查询嵌套在文档中的相关信息。
  • Aggregation Query:用于进行数据的统计和分析,如求和、平均值、最小值、最大值和分组等。

结论

Elasticsearch提供了丰富多样的查询方式,可以满足各种复杂场景下的搜索需求。通过灵活组合这些查询方式,你可以构建出高效且精确的搜索解决方案。希望本文能帮助你更好地理解和应用Elasticsearch的查询功能。当然,我可以为您提供一个简单的示例代码,结合实际应用场景。假设我们正在开发一个电子商务网站,并希望实现一个功能,让用户能够添加商品到购物车中。以下是一个简单的Python示例代码,用于演示这个过程:

class Product:
    def __init__(self, id, name, price):
        self.id = id
        self.name = name
        self.price = price

class Cart:
    def __init__(self):
        self.items = {}

    def add_product(self, product, quantity):
        if product.id not in self.items:
            self.items[product.id] = {'product': product, 'quantity': 0}
        self.items[product.id]['quantity'] += quantity

    def get_total_price(self):
        total = 0
        for item in self.items.values():
            total += item['product'].price * item['quantity']
        return total

    def display_cart(self):
        for item_id, item_details in self.items.items():
            product = item_details['product']
            quantity = item_details['quantity']
            print(f"{product.name} (ID: {product.id}) - Quantity: {quantity} - Price: {product.price * quantity}")
        print(f"Total Price: {self.get_total_price()}")

# 创建产品实例
product1 = Product(1, 'Laptop', 1000)
product2 = Product(2, 'Smartphone', 500)

# 创建购物车实例
cart = Cart()

# 添加产品到购物车
cart.add_product(product1, 2)  # 添加2台笔记本电脑到购物车
cart.add_product(product2, 1)  # 添加1部智能手机到购物车

# 显示购物车内容和总价
cart.display_cart()

这个示例代码定义了两个类:​​Product​​和​​Cart​​。​​Product​​类表示一个产品,包含产品的ID、名称和价格。​​Cart​​类表示购物车,它有一个字典属性​​items​​来存储购物车中的产品及其数量。​​Cart​​类还提供了​​add_product​​方法来添加产品到购物车,并指定数量;​​get_total_price​​方法来计算购物车中所有产品的总价;以及​​display_cart​​方法来显示购物车的内容和总价。

在示例的末尾,我们创建了两个产品实例(笔记本电脑和智能手机),然后创建了一个购物车实例,并将这些产品添加到购物车中。最后,我们调用​​display_cart​​方法来显示购物车的内容和总价。当然可以,但您没有提供具体的代码段,所以我将假设您想要了解一个典型的中等复杂度的代码示例,并对其进行详细解释。以下是一个简单的Python代码,用于从用户输入中读取一系列数字,并计算它们的总和与平均值:

def calculate_sum_and_average():
    numbers = input("请输入一系列数字,用空格隔开:").split()
    num_list = [float(num) for num in numbers]  # 将字符串列表转换为浮点数列表
    total_sum = sum(num_list)  # 计算总和
    average = total_sum / len(num_list)  # 计算平均值
    return total_sum, average

if __name__ == "__main__":
    total, avg = calculate_sum_and_average()
    print(f"数字的总和是:{total}")
    print(f"数字的平均值是:{avg}")

现在,我将详细解释这段代码:

  1. 函数定义
  • ​def calculate_sum_and_average():​​ 定义了一个名为 ​​calculate_sum_and_average​​ 的函数,该函数不接受任何外部参数。
  1. 获取用户输入
  • ​numbers = input("请输入一系列数字,用空格隔开:").split()​​:这行代码首先打印一个提示消息,要求用户输入一系列用空格隔开的数字。​​input()​​ 函数读取用户的输入(作为字符串),然后使用 ​​split()​​ 方法将其拆分为一个字符串列表,其中每个字符串代表一个数字。
  1. 数据转换
  • ​num_list = [float(num) for num in numbers]​​:这里使用了一个列表推导式(list comprehension),它遍历 ​​numbers​​ 列表中的每个字符串元素,并将其转换为浮点数。转换后的浮点数存储在新的列表 ​​num_list​​ 中。
  1. 计算总和
  • ​total_sum = sum(num_list)​​:​​sum()​​ 函数是Python的内置函数,用于计算列表中所有元素的总和。这里,它计算 ​​num_list​​ 中所有浮点数的总和,并将结果存储在变量 ​​total_sum​​ 中。
  1. 计算平均值
  • ​average = total_sum / len(num_list)​​:要计算平均值,我们将总和 ​​total_sum​​ 除以列表 ​​num_list​​ 的长度(即元素的数量)。​​len()​​ 函数返回列表中的元素数量。计算出的平均值存储在变量 ​​average​​ 中。
  1. 返回结果
  • ​return total_sum, average​​:函数结束时返回两个值:总和 ​​total_sum​​ 和平均值 ​​average​​。
  1. 主程序入口
  • ​if __name__ == "__main__":​​:这是Python脚本的标准主程序入口。当脚本被直接执行(而不是作为模块导入)时,这个条件成立。
  • 在这个条件下,我们调用 ​​calculate_sum_and_average()​​ 函数,并将返回的总和和平均值分别赋值给变量 ​​total​​ 和 ​​avg​​。
  • 然后,我们使用 ​​print()​​ 函数打印出总和和平均值的消息。

这段代码展示了如何从用户那里获取输入、处理数据(包括类型转换和数学运算),并输出结果。它是编程中常见任务的一个简单示例。

标签:ElasticSearchQuery,product,sum,查询,详解,Query,total,self
From: https://blog.csdn.net/q7w8e9r4/article/details/144810894

相关文章

  • JAVA连接MYSQL数据库实现查询
    准备驱动(1)查看数据库版本号(2)根据数据库版下载对应版本驱动驱动下载网址:MySQL::DownloadMySQLConnector/J(ArchivedVersions)若没有则选择接近自己版本的低版本。说明:......
  • Python中指数概率分布函数的绘图详解
    在数据科学和统计学中,指数分布是一种应用广泛的连续概率分布,通常用于建模独立随机事件发生的时间间隔。通过Python,我们可以方便地计算和绘制指数分布的概率密度函数(PDF)。本文将详细介绍指数分布的原理、应用场景,并提供详细的代码示例,展示如何在Python中绘制指数分布的概率密......
  • Java实现拍卖系统详解
    一、项目背景与需求分析随着互联网技术的飞速发展,电子商务领域不断拓展新的业务模式,在线拍卖系统应运而生并逐渐成为一种重要的商业交易方式。在当今数字化的时代,人们越来越倾向于通过网络平台进行各类交易活动,在线拍卖系统能够打破传统拍卖在时间和空间上的限制,使得参与者可以在......
  • xargs命令详解
    xargs是一个强大的命令行工具,用于将标准输入数据转换为命令行参数,并执行一个命令。以下是xargs的一些详细用法和选项:基本用法xargs命令的基本格式如下:command|xargsanother_command这里,command的输出将作为another_command的参数。选项-0或--null:输入项之间用......
  • leetcode1938 查询最大基因差
    给定一棵n个节点的有根树,节点i的父节点为parents[i],根节点的父节点为-1,节点的基因值等于自身编号。有m个询问,queries[i]=[node[i],val[i]],返回从根节点到node[i]的路径上所有节点基因值与val[i]的异或最大值。2<=n<=1E5;1<=m<=3E4;0<=val[i]<=2E5分析:01-trie+离线+dfs。(1)用01......
  • 按库存生产 (Make-To-Stock, MTS) 的计划策略配置和应用详解
    在SAP系统中,按库存生产(MTS)是一种基于预测安排生产的模式,与客户订单无直接关联。SAP系统为MTS模式预配置了多种计划策略,以满足不同企业的需求。本文将重点介绍计划策略10、11、40和52的配置和应用。MTS模式中的计划策略概述下表列出了四种计划策略的主要参数:......
  • RocketMQ 消息顺序与事务机制详解
    目录一、简介二、RocketMQ架构概述三、RocketMQ消息流转过程四、RocketMQ消息顺序与事务五、RocketMQ高可用性与扩展性六、RocketMQ应用场景七、总结一、简介RocketMQ是一款高吞吐量、高可扩展性的分布式消息中间件,由阿里巴巴开源,并已成为Apache的顶级项目......
  • JavaScript引擎在优化标识符查询方面做了什么?
    JavaScript引擎在优化标识符查询方面采取了多种策略和技术,以提高代码执行效率和性能。以下是一些主要的优化方法:作用域链和变量对象的优化:JavaScript引擎通过创建作用域链来管理变量的访问。每个函数都有一个[[Scope]]属性,指向函数的作用域链。当函数执行时,会创建一个执行上下文......
  • 一文详解-JavaScript中 es5 原型和 es6-class
    一文详解-JavaScript中es5原型和es6-class原型真的有用吗有不少小伙子应该会有这个感觉大家都在说原型prototype很重要,那为什么我却用不到?原因不外乎这几个:框架重度使用者,我们目前的前端主流业务,几乎都是使用vue,react,微信小程序在开发项目。这些框架封装得太过......
  • CSS系列(42)-- Backdrop Filter详解
    前端技术探索系列:CSSBackdropFilter详解......