elasticsearch - 使用多个“术语”和一个列表的 ElasticSDL 查询
问题描述
我正在尝试形成一个查询来匹配来自或到特定 IP 地址的所有连接。 我的日志包含 SRC_ip 和 DST_ip。
我不想使用两个查询或查询的重复部分太多,因为它会很长而且编辑起来不太清楚。
例如,下面是如何实现我需要的 IP 地址 1.1.1.1、1.1.1.2。这个查询工作正常,但如果我想检查数百个 IP,它会太长而且不容易经常编辑。
{
"query": {
"bool": {
"should": [
{
"match_phrase": {
"src_ip": "1.1.1.1"
}
},
{
"match_phrase": {
"dst_ip": "1.1.1.1"
}
},
{
"match_phrase": {
"src_ip": "1.1.1.2"
}
},
{
"match_phrase": {
"dst_ip": "1.1.1.2"
}
}
],
"minimum_should_match": 1
}
}
}
我正在寻找的理想解决方案看起来像这样,但将包含 [] 中一个列表中的 src_ip 或 dst_ip 地址。
{
"query": {
"bool": {
"filter": {
"terms": {
"src_ip": [
"1.1.1.1",
"1.1.1.2",
.....etc....
]
}
}
}
}
}
在文档中,我没有找到任何方法来组合术语。有什么建议我可以同时为两者编写一些漂亮的查询吗?像这样的东西:
"terms": {
"src_ip" OR "dst_IP" : [1.1.1.1,1.1.1.2,1.1.1.3,1.1.1.4]
}
解决方案
您可以利用查询字符串查询,例如:
{
"query": {
"bool": {
"filter": {
"query_string": {
"query": "1.1.1.1 OR 1.1.1.2 OR 1.1.1.3",
"fields": [
"src_ip",
"dst_ip"
]
}
}
}
}
}
另请记住,IP 地址有一个专用的映射类型,它允许您运行可以保存的范围查询 ( https://www.elastic.co/guide/en/elasticsearch/reference/7.13/range.html )如果您对连续地址感兴趣,请提供一些样板文件。
推荐阅读
- c# - DataTable 排序而不创建新的 DataTable 并维护 RowState
- javascript - jQuery在单击雪佛龙时折叠和展开表格行
- python - Google API 客户端,调用已构建的 API,参数名称中带有点
- java - 扩展 JBoss Data Virt ws 转换器以处理分页源
- directory - MUI_PAGE_DIRECTORY 默认目录
- php - Symfony 3、RESTAPI、PUT、文件上传
- powershell - 用服务器填充 Checkedlistbox
- android - 绘制 match_parent 的垂直线
- mysql - MySQL 错误 UPDATE 的目标表 *view* 不可更新
- google-cloud-platform - hbase和google cloud bigtable是什么关系?