kiwiz / esquery
Elasticsearch 查询库
Requires
- elasticsearch/elasticsearch: >=2.0
- kunststube/rison: ^0.92.1
Requires (Dev)
- phpunit/phpunit: ^4.8
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 将以表格形式返回分桶数据。可以将聚合接受的任何参数传递给字段之后。
支持的聚合: terms
、sig_terms
、card
、max
、avg
、sum
- 语法:
'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_addr
和 date
对 abc.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