kiwiz/esquery

Elasticsearch 查询库

v1.0.1 2018-11-08 20:28 UTC

This package is not auto-updated.

Last update: 2024-09-24 01:21:23 UTC


README

ESQuery 是一个用于查询 Elasticsearch 的查询解析器。每个 ESQuery 查询由一个或多个由竖线(|)分隔的 "命令" 组成。在执行过程中,每个命令被转换为 Elasticsearch DSL 查询并发送到服务器。返回的任何结果都会传递到链中的下一个命令。

结构

每个查询的结构如下

    Options* SearchCommand ('|' [AggCommand | JoinCommand])* ('|' [TransactionCommand])?

英文

  • 一系列 0 或多个选项
  • 一个搜索命令
  • 一系列 0 或多个聚合命令或连接命令
  • 一个可选的事务命令

每个命令之间用竖线(|)分隔。

语法

选项

可以在每个查询中启用/禁用的选项。每个选项前面都有一个 $

排序

  • 排序的字段列表。
  • 类型:列表
  • 示例: $sort:[time:ASC, type:DESC, duration:DESC]

映射

  • 字段和重命名它们的映射。
  • 类型:映射
  • 示例: $map:[request_ip:ip, geoip_location:loc]

选项

  • date_field:用作时间戳的字段名称。
  • to:获取结果的最新日期。(Unix 时间戳)
  • from:获取结果的最早日期。(Unix 时间戳)
  • size:返回的最大结果数。
  • flatten:将任何嵌套结构扁平化为键值映射。
  • fields:要返回的字段列表。

命令

搜索

标准的 Lucene QueryParser 查询。ESQuery 中几乎所有的功能都可用。以下列出的那些主要与评分相关:

  • 模糊搜索
  • 邻近搜索
  • 提升一个词项

必须是第一个命令。

  • 语法: QUERY_PARSER_QUERY
  • 示例: level:99 type:normal
列表

将值数组插入查询中。ESQuery 对提供的值执行术语过滤器。

  • 语法: KEY:@LIST_NAME
  • 示例: src_ip:@bad_ip_list

连接

从上一个命令中提取值并使它们可用于后续查询。

  • 语法: 'join' 'source:'SOURCE_FIELD 'target:'DEST_FIELD QUERY_PARSER_QUERY
  • 示例: type:tcp | join source:src_ip target:dst_ip flags:0

事务

结合具有给定字段匹配值的文档。必须是最后一个命令(如果使用的话)。

  • 语法: 'trans' 'field:'FIELD_NAME
  • 示例: trans field:request_uuid

聚合

标准 Elasticsearch 聚合。可以通过链式调用多个聚合来嵌套它们。ESQuery 将以表格形式返回分桶数据。可以将聚合接受的任何参数传递给字段之后。

支持的聚合: termssig_termscardmaxavgsum

  • 语法: 'agg:'AGG_TYPE 'field:'FIELD_NAME (AGG_OPT':'AGG_OPT_VAL)*
  • 示例: agg:terms field:user_id min_doc_count:50

示例

匹配所有文档。

*

获取针对 abc.com 的请求的计数,按 ip_addr 分组。

host:abc.com | agg:terms field:ip_addr

ip_addrdateabc.com 的所有请求进行排序。

$sort:[ip_addr:ASC, date:ASC] host:abc.com

查找具有与 bob 相同电子邮件的所有用户。

user:bob | join source:email target:email

查找并分组与来自 10.0.0.5 的请求相关的所有日志行。

ip_addr:10.0.0.5 | trans field:request_uuid

找到任何具有来自 @include 的值但不是来自 @exclude 的值的文档。

tag:@include -tag:@exclude

找到最常见的用户代理。

* | agg:terms field:user_agent size:1