运用 geoip 处理器来丰富 Elasticsearch 数据

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Geoip 处理器可以解析 IPv4 和 IPv6 地址,根据来自 Maxmind 数据库的数据添加有关 IP 地址地理位置的信息,并将此信息添加到 geoip 字段下。

Geoip 处理器可以解析 IPv4 和 IPv6 地址,根据来自 Maxmind 数据库的数据添加有关 IP 地址地理位置的信息,并将此信息添加到 geoip 字段下。
默认情况下,ingest-geoip 模块与 Maxmind 的 GeoLite2 城市,GeoLite2 国家/地区和 GeoLite2 ASN geoip2 数据库一起提供,可根据 CCA-ShareAlike 4.0 许可使用。 有关更多详细信息,请参见http://dev.maxmind.com/geoip/geoip2/geolite2/

geoip 处理器可以与 Maxmind 等其他 GeoIP2 数据库一起运行。

1、将文件复制到 ingest-geoip 配置目录中。
2、 database_file 选项应用于指定自定义数据库的文件名。
3、自定义数据库文件必须未压缩存储。
4、ingest-geoip 配置目录位于 $ES_CONFIG/ingest-geoip。

我们先来使用几个简单的例子来展示如何使用 geoip 这个处理器。

示例一、使用默认城市数据库

使用默认城市数据库,将地理信息添加到基于 ip 字段的 geoip 字段

PUT _ingest/pipeline/geoip
{
  "description" : "Add geoip info",
  "processors" : [
    {
      "geoip" : {
        "field" : "ip"
      }
    }
  ]
}
 
PUT my_index/_doc/my_id?pipeline=geoip
{
  "ip": "8.8.8.8"
}
 
GET my_index/_doc/my_id

我们知道上面的 IP 地址是一个很著名的 DNS 解析服务器地址。我们使用了 geoip 处理器来对 ip 这个字段进行丰富。

返回结果是:

{
  "_index" : "my_index",
  "_type" : "_doc",
  "_id" : "my_id",
  "_version" : 4,
  "_seq_no" : 5,
  "_primary_term" : 9,
  "found" : true,
  "_source" : {
    "geoip" : {
      "continent_name" : "North America",
      "country_iso_code" : "US",
      "location" : {
        "lon" : -97.822,
        "lat" : 37.751
      }
    },
    "ip" : "8.8.8.8"
  }
}

上面返回的字段,除了原有的 ip 字段外, 也看到了一个新增加的字段 geoip。这个字段是原始字段完全没有的,但是经过 geoip 处理器处理后,就增加了很多有用的信息,比如 continent_name, country_iso_code 及 location 字段。我们可以知道这个服务器的地址位置,比如经纬度信息。这些信息对使用地图应用,并把数据显示在地图上非常有用。

示例二、使用默认国家/地区数据库
使用默认国家/地区数据库,并根据 ip 字段将地理信息添加到 geo 字段

请注意,此数据库包含在模块中。

PUT _ingest/pipeline/geoip
{
  "description" : "Add geoip info",
  "processors" : [
    {
      "geoip" : {
        "field" : "ip",
        "target_field" : "geo",
        "database_file" : "GeoLite2-Country.mmdb"
      }
    }
  ]
}
 
PUT my_index/_doc/my_id?pipeline=geoip
{
  "ip": "8.8.8.8"
}
 
GET my_index/_doc/my_id

返回:

{
  "_index" : "my_index",
  "_type" : "_doc",
  "_id" : "my_id",
  "_version" : 5,
  "_seq_no" : 6,
  "_primary_term" : 9,
  "found" : true,
  "_source" : {
    "geo" : {
      "continent_name" : "North America",
      "country_iso_code" : "US"
    },
    "ip" : "8.8.8.8"
  }
}

但是并不是所有的 IP 地址都可以在数据库中找到地理信息。在这种情况下,没有 target_field 被插入到文档中。

特别指明一下: target_field 在默认的情况下是 geoip 字段,比如在上面的调用中,我们指明是 geo。

示例三、找不到“80.231.5.0”的信息时

找不到“80.231.5.0”的信息时,文档被导入后的展示:

PUT _ingest/pipeline/geoip
{
  "description" : "Add geoip info",
  "processors" : [
    {
      "geoip" : {
        "field" : "ip"
      }
    }
  ]
}
 
PUT my_index/_doc/my_id?pipeline=geoip
{
  "ip": "80.231.5.0"
}
 
GET my_index/_doc/my_id

上面查询的结果是:

{
  "_index" : "my_index",
  "_type" : "_doc",
  "_id" : "my_id",
  "_version" : 6,
  "_seq_no" : 7,
  "_primary_term" : 9,
  "found" : true,
  "_source" : {
    "ip" : "80.231.5.0"
  }
}

由于IP 地址 80.231.5.0 在数据库中并不存在,那么最终在文档中没有添加任何的字段。

在数据被导入到 Elasticsearch 中时,尽管此处理器使用包含 IP 地址的估计纬度和经度的位置字段来丰富你的文档,但是如果未在映射中明确定义该字段,则该字段在 Elasticsearch 中不会被索引为 geo_point 类型。

你可以对上面的示例索引使用以下映射:

PUT my_ip_locations
{
  "mappings": {
    "properties": {
      "geoip": {
        "properties": {
          "location": { "type": "geo_point" }
        }
      }
    }
  }
}

声明:本文由原文作者“ Elastic 中国社区布道师——刘晓国”授权转载,对未经许可擅自使用者,保留追究其法律责任的权利。

出处链接:https://elasticstack.blog.csdn.net/.


image.png

阿里云Elastic Stack】100%兼容开源ES,独有9大能力,提供免费 X-pack服务(单节点价值$6000)

相关活动


更多折扣活动,请访问阿里云 Elasticsearch 官网

阿里云 Elasticsearch 商业通用版,1核2G ,SSD 20G首月免费
阿里云 Logstash 2核4G首月免费


image.png

image.png

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
|
关系型数据库 MySQL
elasticsearch对比mysql以及使用工具同步mysql数据全量增量
elasticsearch对比mysql以及使用工具同步mysql数据全量增量
24 0
|
2月前
|
消息中间件 存储 关系型数据库
【微服务】mysql + elasticsearch数据双写设计与实现
【微服务】mysql + elasticsearch数据双写设计与实现
71 2
|
2月前
|
监控 安全 Linux
【Elasticsearch专栏 14】深入探索:Elasticsearch使用Logstash的日期过滤器删除旧数据
使用Logstash的日期过滤器可以有效删除Elasticsearch中的旧数据,释放存储空间并提高集群性能。通过配置Logstash,可以指定索引模式、筛选时间戳早于特定阈值的文档,并在输出阶段删除这些旧数据。执行配置时,需确保Logstash与Elasticsearch连接正常,并监控日志以确保操作安全。定期执行此操作可确保旧数据不会过多积累。总之,Logstash的日期过滤器提供了一种简单而高效的方法,帮助管理和优化Elasticsearch中的数据。
|
2月前
|
存储 搜索推荐 Java
|
4月前
|
存储 缓存 数据库
PB数据毫秒级搜索之Elasticsearch(二)基础了解
PB数据毫秒级搜索之Elasticsearch(二)基础了解
92 0
|
7月前
|
存储 自然语言处理 Java
【elasticsearch】记录ES查询数据结果为空的问题(单个字搜索可以,词语搜索为空)
【elasticsearch】记录ES查询数据结果为空的问题(单个字搜索可以,词语搜索为空)
303 0
|
8月前
|
数据库 索引
elasticsearch中join类型数据如何进行父子文档查询?
elasticsearch中join类型数据如何进行父子文档查询?
|
2月前
|
监控 Java 测试技术
【Elasticsearch专栏 13】深入探索:Elasticsearch使用Curator工具删除Elasticsearch中的历史数据
使用Curator工具可以有效管理Elasticsearch中的旧数据,通过编写YAML配置文件定义删除操作。配置中指定了基于索引名称前缀和年龄的过滤器,确保仅删除符合条件的旧索引。执行删除操作时,Curator会应用过滤器识别目标索引,并向Elasticsearch发送删除请求。通过设置选项,如忽略空列表和超时时间,可以确保操作的灵活性和稳定性。使用Curator不仅释放了存储空间,还提高了查询性能,是维护Elasticsearch健康的重要工具
|
2月前
|
JSON 监控 数据管理
【Elasticsearch专栏 12】深入探索:Elasticsearch使用索引生命周期管理(ILM)自动化删除旧数据
Elasticsearch的ILM功能允许用户定义策略,自动管理索引从创建到删除的生命周期。用户可以设置策略,根据索引年龄或大小自动删除旧数据,节省存储空间。通过应用ILM策略于索引模板,新索引将遵循预定义的生命周期。用户还可以监控ILM状态,确保策略按预期执行。使用ILM,用户可以高效地管理数据,确保旧数据及时删除,同时保持数据完整性和安全性。
|
3月前
|
存储 缓存 自然语言处理
【Elasticsearch专栏 05】深入探索:Elasticsearch在处理非结构化数据时,倒排索引有何优势
在处理非结构化数据时,倒排索引的优势在于其高效的查询性能,能够迅速匹配文本中的关键词,实现全文搜索。此外,倒排索引支持复杂的查询操作,可扩展性强,且通过压缩技术优化存储空间。这些特点使倒排索引成为处理非结构化数据的理想选择。

相关产品

  • 检索分析服务 Elasticsearch版