ES 实战复杂sql查询、修改字段类型

简介: ES 实战复杂sql查询、修改字段类型

转载请注明出处:

1.查询索引得 mapping 与 setting

 

  get 直接查询 索引名称时,会返回 该 索引得 mapping 和 settings 得配置,上述返回得结构如下:

View Code

2. 执行复杂条件得查询:

  该dsl 为:

GET terra-syslog_2023-07-15/_search
{
  "size": 0,
  "query": {
    "bool": {
      "must": [
        {
          "wildcard": {
            "syslog_program.keyword": {
              "wildcard": "*SSH_USER_LOGIN*",
              "boost": 1
            }
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1
    }
  },
  "aggregations": {
    "time_agg": {
      "date_histogram": {
        "field": "received_at",
        "format": "EEE",
        "fixed_interval": "1d",
        "offset": 0,
        "order": {
          "_key": "asc"
        },
        "keyed": false,
        "min_doc_count": 0
      },
      "aggregations": {
        "user_agg": {
          "terms": {
            "field": "user.keyword",
            "size": 10,
            "min_doc_count": 1,
            "shard_min_doc_count": 0,
            "show_term_doc_count_error": false,
            "order": [
              {
                "_count": "desc"
              },
              {
                "_key": "asc"
              }
            ]
          }
        }
      }
    }
  }
}

这段 DSL 具有以下作用:

  1. "size": 0: 设置返回的结果集大小为 0,即只返回聚合结果,不返回匹配的文档。
  2. query部分:构建了一个布尔查询,包含多个existsrange子查询,用于过滤符合条件的文档。
  • exists 子查询检查指定字段是否存在,这里依次检查了 source.ipsource.portdestination.ipdestination.porthost.nameflow.rep_tags 字段的存在。
  • range 子查询指定了对 @timestamp 字段进行范围筛选,从给定的时间戳范围中选择满足条件的文档。
  1. aggregations部分:定义了聚合操作,通过terms聚合按照host.name字段进行分组,并计算每个组内的文档数。
  • terms 聚合将按照 host.name 字段的值进行分组。设置 size 为最大整数 2147483647,以确保返回所有分组。
  • min_doc_count 设置为 1,表示只返回至少拥有一个文档的分组。
  • shard_min_doc_count 设置为 0,表示在单个分片上没有要求文档数量的最小要求。
  • show_term_doc_count_error 设置为 false,不显示术语文档计数错误。
  • order 指定了排序规则,首先按照分组中的文档数 _count 降序排序,然后按照 host.name 字段的值升序排序。
  • terms 聚合内部定义了一个子聚合 cardinality,用于计算每个分组内唯一组合的数量。这里通过拼接 source.ipsource.portdestination.ipdestination.port 字段的值来作为唯一标识。

  该 DSL 查询的作用是在给定时间范围内,统计满足一系列条件(存在指定字段)的文档,并按照 host.name 进行分组并计算每个组内唯一组合的数量。

  另外,在查询时,使用 _search 可以执行DSL, 如果没有_search 时,可以查询该索引得文档结构类型,以及该索引得副本、分片等信息

3.修改 该 索引得 mapping 中得字段类型

  将前面的映射中的 syslog_timestamp 字段类型修改为日期类型(date),需要更新映射定义并重新创建索引。  

  1. 删除现有的索引,或者创建一个新的索引。
  2. 更新映射定义,将 syslog_timestamp 的类型更改为 "date"。以下是更新后的映射示例:
{
  "mappings": {
    "_doc": {
      "properties": {
        // 其他字段...
        "syslog_timestamp": {
          "type": "date"
        },
        // 其他字段...
      }
    }
  }
}
  1. 使用上述修改后的映射定义来创建索引或更新现有索引的映射。可以使用 Elasticsearch 的 RESTful API 或管理工具(如 Kibana Console)执行以下请求:
PUT terra-syslog_2023-07-15
{
  "mappings": {
    "_doc": {
      "properties": {
        // 其他字段...
        "syslog_timestamp": {
          "type": "date"
        },
        // 其他字段...
      }
    }
  }
}

  这样,syslog_timestamp 字段的类型就会被修改为日期类型,并可以存储、索引和查询日期值。根据数据的格式和需求,Elasticsearch 会自动解析日期字符串并将其转换为适当的日期对象。

 

标签: ElasticSearch

目录
相关文章
|
10天前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
22 10
|
4天前
|
SQL 移动开发 Oracle
SQL语句实现查询连续六天数据的方法与技巧
在数据库查询中,有时需要筛选出符合特定时间连续性条件的数据记录
|
11天前
|
SQL Java 数据库连接
如何使用`DriverManager.getConnection()`连接数据库,并利用`PreparedStatement`执行参数化查询,有效防止SQL注入。
【10月更文挑战第6天】在代码与逻辑交织的世界中,我从一名数据库新手出发,通过不断探索与实践,最终成为熟练掌握JDBC的开发者。这段旅程充满挑战与惊喜,从建立数据库连接到执行SQL语句,再到理解事务管理和批处理等高级功能,每一步都让我对JDBC有了更深的认识。示例代码展示了如何使用`DriverManager.getConnection()`连接数据库,并利用`PreparedStatement`执行参数化查询,有效防止SQL注入。
44 5
|
11天前
|
SQL 存储 关系型数据库
SQL判断CHAR类型字段不为空的方法与技巧
在SQL查询中,判断一个CHAR类型字段是否不为空是一个常见的需求
|
11天前
|
SQL 数据挖掘 数据库
SQL查询每秒的数据:技巧、方法与性能优化
id="">SQL查询功能详解 SQL(Structured Query Language,结构化查询语言)是一种专门用于与数据库进行沟通和操作的语言
|
4天前
|
SQL 数据可视化 BI
SQL语句及查询结果解析:技巧与方法
在数据库管理和数据分析中,SQL语句扮演着至关重要的角色
|
9天前
|
SQL 监控 关系型数据库
使用SQL语句查询操作耗时的技巧与方法
在数据库管理和优化过程中,了解SQL查询操作的耗时是至关重要的
|
9天前
|
SQL
创建分组总计查询的SQL技巧与方法
在SQL中,创建分组总计查询(也称为聚合查询)是一项非常基础且重要的技能
|
SQL 数据库
《SQL与关系数据库理论——如何编写健壮的SQL代码》一2.1 类型和关系
本节书摘来华章计算机《SQL与关系数据库理论——如何编写健壮的SQL代码》一书中的第2章 ,第2.1节 C. J. Date 著 单世民 何英昊 许侃 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1149 1
|
29天前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")