首页 文章

弹性搜索映射的问题

提问于
浏览
0

正如指南所述,https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-geo-point-type.html#_mapping_options

我可以使用lat / lon变量数组,并将其映射到geo_point类型 .

所以这是我目前的映射:

{
   "zoek": {
      "mappings": {
         "geo": {
            "properties": {
               "country": {
                  "type": "string"
               },
               "geonameid": {
                  "type": "string"
               },
               "locatie": {
                  "type": "double"
               },
               "name": {
                  "type": "string"
               }
            }
         }
      }
   }
}

“locatie”指的是两个double的数组 . [lat,lon] .

我想将其映射到geo_point变量以执行地理距离查询 .

所以我试过这个:

PUT /zoek/geo/_mapping 
{
    "geo" : {
        "properties" : {
            "locatie" : {"type" : "geo_point" }
        }
    }
}

并得到此错误:

{
   "error": "MergeMappingException[Merge failed with failures {[mapper [locatie] of different type, current_type [double], merged_type [geo_point]]}]",

“状态”:400}

有什么建议?

映入眼帘,

达格玛 .

1 回答

  • 1

    在给定的映射类型(即 geo )中,您不能定义两个具有相同名称的字段(即 locatie ),而是另一个类型(即一个为 double ,另一个为 geo_point ) . 由于您的 geo 映射类型中已经有一个字段名称 locatie ,因此您无法添加具有相同名称的新名称,但您绝对可以使用其他名称添加另一个名称,例如 location_geo .

    但是,我建议您更改原始映射并将 locatie (如 double )替换为 locatie (如 geo_point ) . 如果您这样做,则需要重新索引现有数据,因此可能不适合您 .

相关问题