You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Elasticsearch中能否将字段同时设为ip与ip_range类型?

解决Elasticsearch中单个字段同时支持IP和IP范围的问题

嘿,作为ES新手碰到这个问题太正常了,我来一步步帮你搞定!

首先你之前的多字段配置结构写错了——fields应该是sourceIp这个字段的子属性,而不是和它同级。正确的思路是把ipip_range都作为sourceIp的多字段来定义,这样就能同时兼容两种类型的值了。

正确的映射配置

{
  "mappings": {
    "properties": {
      "sourceIp": {
        "type": "ip",  // 主字段设为IP类型,用来存储单个IP值
        "fields": {
          "range": {
            "type": "ip_range"  // 多字段,专门用来存储IP范围
          }
        }
      }
    }
  }
}

如何写入数据

你有两种灵活的写入方式:

  • 写入单个IP值(会自动存储到主字段sourceIp中):
{
  "sourceIp": "192.168.1.1"
}
  • 写入IP范围值(需要指定到多字段sourceIp.range):
{
  "sourceIp": {
    "range": "192.168.1.0/24"
  }
}

也可以直接指定字段路径写入:

{
  "sourceIp.range": "192.168.1.0/24"
}

如何查询数据

  • 查询匹配单个IP的文档:
{
  "query": {
    "term": {
      "sourceIp": "192.168.1.1"
    }
  }
}
  • 查询某个IP是否落在存储的IP范围内:
{
  "query": {
    "range": {
      "sourceIp.range": {
        "gte": "192.168.1.5",
        "lte": "192.168.1.20"
      }
    }
  }
}
  • 反过来,查询包含目标IP的IP范围文档:
{
  "query": {
    "term": {
      "sourceIp.range": "192.168.1.5"
    }
  }
}

这样配置后,你的sourceIp字段就能完美同时处理单个IP和IP范围的需求啦!

内容的提问来源于stack exchange,提问作者Charlotte Marouf

火山引擎 最新活动