elasticsearch,mapping,Mongodb,elasticsearch,Mapping" /> elasticsearch,mapping,Mongodb,elasticsearch,Mapping" />

将地理点从MongoDB映射到Elasticsearch

将地理点从MongoDB映射到Elasticsearch,mongodb,elasticsearch,mapping,Mongodb,elasticsearch,Mapping,我正在尝试使用Kibana将位置信息视为地理点。数据已经从Mongodb传输到ElasticSearch。Mongodb中的数据如下所示: { "_id" : "1", "location" : "42.2734, -83.7133", "dst_ip" : "192.168.79.136", "src_ip" : "35.139.46.72" } 我发现了一个类似于我的,所以我在Mongodb中使用字符串类型,但在ElasticSearch中,“location”的值也是字符串 那么,如何映

我正在尝试使用Kibana将位置信息视为地理点。数据已经从Mongodb传输到ElasticSearch。Mongodb中的数据如下所示:

{ "_id" : "1", "location" : "42.2734, -83.7133", "dst_ip" : "192.168.79.136", "src_ip" : "35.139.46.72" }
我发现了一个类似于我的,所以我在Mongodb中使用字符串类型,但在ElasticSearch中,“location”的值也是字符串


那么,如何映射应存储为地理点的值呢?

您应该首先在ES中创建适当的映射,如smth

PUT my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "location": {
          "type": "geo_point"
        }
      }
    }
  }
}
您需要这样做,因为ES不是无模式的,并且在索引时解释、分析和处理数据。在这之后,您可以用已有的格式对数据进行索引—用逗号分隔的字符串加上coords就可以了


有关更多详细信息,请参见

谢谢您的回答。但是,我需要将数据从MongoDB同步到Elasticsearch,所以我不会使用您给出的PUT命令手动将1条记录推送到。此命令用于创建映射。每个索引生命周期运行一次。ES不像Mongo那样是无模式的。因此,您需要提前指定字段类型(在添加数据之前)。一旦这样做了,您就可以以任何方式重新索引/同步数据。如果不显式指定字段类型,ES会隐式地为您指定字段类型,ES会将“42.2734,-83.7133”视为简单字符串。我知道这不是您的问题,但位置是一个“字符串”
“位置”:“42.2734,-83.7133”
,这对MongoDB没有好处。请参见地理空间索引和查询文档中的。所以无论你读到什么信息都会把你引入歧途。