使用 Must 和 Must not 的 Elasticsearch 查询
Posted
技术标签:
【中文标题】使用 Must 和 Must not 的 Elasticsearch 查询【英文标题】:Elasticsearch query using of Must and must not 【发布时间】:2022-01-20 20:49:27 【问题描述】:在 ES 查询中我有 IP 字段,现在我想排除一些 IP 的系列。 应排除的ip系列:192.168.0.0/16
这里正在尝试查询,但我遇到了错误。
"size": 0,
"query":
"bool":
"filter": [
"match_all":
,
"range":
"timestamp":
"gte": "now-1y",
"lte": "now",
"format": "epoch_millis"
],
"must_not":
"match":
"ip_address":"192.168*"
错误: 未能创建查询:'192.168*' 不是 IP 字符串文字
还有什么方法可以排除这个IP系列?
【问题讨论】:
【参考方案1】:您可以使用范围查询来排除IP地址在192.168.*
范围内的所有文档
"query":
"bool":
"filter": [
"match_all":
,
"range":
"timestamp":
"gte": "now-1y",
"lte": "now",
"format": "epoch_millis"
],
"must_not":
"range":
"ip_addr":
"gte": "192.168.0.0",
"lt": "192.168.255.255"
更新 1:
您可以在 must_not
块内使用多个范围查询,以排除多个 IP 地址范围
"query":
"bool":
"filter": [
"match_all":
],
"must_not": [
"range":
"ip_addr":
"gte": "192.168.0.0",
"lt": "192.168.255.255"
,
"range":
"ip_addr":
"gte": "10.0.0.0",
"lt": "10.255.255.255"
]
【讨论】:
感谢 ESCoder,我们可以在其中添加多个 IP 范围吗?喜欢加10.0.0.0 @mkail 你想在范围查询中包含10.0.0.0
吗?
是的,想在查询中包含这个范围
你能帮忙吗?想要添加多个 IP 范围。
@mkail 已经很久了!如果它帮助您解决了您的问题,您能否接受并投票赞成答案。 TIA ;-)以上是关于使用 Must 和 Must not 的 Elasticsearch 查询的主要内容,如果未能解决你的问题,请参考以下文章
报错:numRecords must not be negative
如何将 must_not 与 ElasticSearch + Grails 的空 JSON 属性一起使用?
使用 pickle.dump - TypeError: must be str, not bytes
WINDOWS.H already included. MFC apps must not #i