Es去重查询详解

一、Es去重查询分页

Es查询结果可能会包含重复的数据,要实现去重查询并进行分页显示,需要结合Es中的聚合函数和分页参数。首先使用terms aggregation对需要去重的字段进行聚合,然后再使用from和size参数对结果进行分页。


GET /index/_search
{
  "size": 10,
  "from": 0,
  "query": {...},
  "aggs":{
    "distinct_field":{
      "terms":{
        "field": "field_to_be_distinct"
      }
    }
  }
}

二、Es单个字段去重查询

如果只需要对单个字段进行去重查询,可以使用cardinality aggregation函数。该函数不仅可以进行去重操作,还可以返回去重后的结果数量。


GET /index/_search
{
  "query": {...},
  "aggs": {
    "distinct_field_count": {
      "cardinality": {
        "field": "field_to_be_distinct"
      }
    }
  }
}

三、Es查询语法

Es查询常用的查询语法有两种:Query DSL和Query String。Query DSL是Es原生的查询语法,Query String则是基于Lucene Query语法的更加简洁易用的查询方式。

Query DSL的语法结构较为复杂,但可以实现更加灵活的查询操作,例如使用bool查询组合多个查询条件。

Query String则是基于字符串的查询语法,使用语法简单,类似于SQL的写法。例如:


GET /index/_search?q=field_name:value

四、Es SQL查询

Es支持SQL语法进行查询,通过在Kibana中输入SQL语句或者将SQL语句通过REST API传递给Es集群来执行SQL查询。

ES SQL的查询方式与传统关系型数据库相似。可以使用SELECT、GROUP BY、ORDER BY等关键字,支持多表查询、连接查询等操作。


POST /_sql?format=txt
{
  "query": "SELECT * FROM index WHERE field_name = 'value' GROUP BY field_id ORDER BY field_date DESC LIMIT 10"
}

五、Es查询数据去重

Es中的聚合函数可以实现对数据进行去重操作,包括根据字段值去重、字符串长度去重等。不同的聚合函数可以实现不同的去重方式。

例如使用terms aggregation进行字段值去重:


GET /index/_search
{
  "size": 0,
  "aggs": {
    "distinct_field_values": {
      "terms": {
        "field": "field_name"
      }
    }
  }
}

六、Es查询索引

在Es中,为了加快查询速度,可以对需要查询的字段创建索引。创建索引可以使用mapping或者template进行操作,常见的索引类型包括text、keyword、date、numeric等。

例如创建text类型的索引:


PUT /index
{
  "mappings": {
    "properties": {
      "field_name": {
        "type": "text"
      }
    }
  }
}

七、Es查询去重复

Es中需要去重的时候,可以使用在查询中添加”collapse”属性的方式,即可以同时实现排序和去重。


GET /index/_search
{
  "query": {...},
  "collapse": {
    "field": "field_name"
  },
  "sort": [{
    "field_date": "desc"
  }]
}

八、Es关联查询

在Es中,可以使用Nested类型嵌套关系来实现关联查询。Nested类型允许在一个文档中嵌套其他文档,以实现多层级的查询。

例如创建Nested类型字段:


PUT /index
{
  "mappings": {
    "properties": {
      "field_name": {
        "type": "nested",
        "properties": {
          "subfield": {
            "type": "text"
          }
        }
      }
    }
  }
}

九、Es为什么查询速度快

Es查询速度之所以快,主要有以下几个原因:

  1. 倒排索引:Es使用倒排索引存储数据,可以快速查找满足条件的文档。
  2. 分片和复制:Es将索引分成多个分片进行存储和查询,每个分片可以独立的进行查询,大大提高查询效率。同时,Es也支持对分片进行复制,保证高可用性和数据备份。
  3. 缓存机制:Es内置了缓存机制,可以缓存查询结果和聚合结果,提高查询效率。
  4. 分布式架构:Es采用分布式架构,可以将数据分散存储在多个节点上,使得查询可以在多个节点中并行处理,提高查询效率。

十、Ems快递查询

Ems快递查询是一种基于Ems快递单号的物流查询服务。与Es的去重查询没有直接关系,但都是常用的数据查询方式。

例如使用Ems快递单号进行查询:


POST https://api-new.oee.dasouche-inc.net/order-delivery/dif-interface/query/es-ems
{
  "emsCodes": [
    "ems_code1",
    "ems_code2",
    ...
  ]
}

原创文章,作者:URNE,如若转载,请注明出处:https://www.506064.com/n/138642.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
URNEURNE
上一篇 2024-10-04 00:21
下一篇 2024-10-04 00:21

相关推荐

  • Spark集成ES开发

    本文将介绍如何使用Spark集成ES进行数据开发和分析。 一、系统概述 Spark是一个基于内存的分布式计算系统,可以快速地处理大量数据。而ES(ElasticSearch)则是一…

    编程 2025-04-28
  • Helm部署ES CrashLoopBackOff

    如果你在使用Helm部署ES时遇到CrashLoopBackOff问题,那么本文将对这一问题进行详细解答。我们将从以下方面进行阐述: 一、问题分析与定位 在使用Helm部署ES时,…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25

发表回复

登录后才能评论