一尘不染

在Elasticsearch中创建或更新映射

elasticsearch

我是Elasticsearch的新手,目前正在实现geo_distance用于搜索的过滤器。到目前为止,我的索引具有以下映射(我已经删除了一些字段):

{
advert_index: {
   mappings: {
      advert_type: {
         properties: {
            __v: {
               type: "long"
            },
            caption: {
               type: "string"
            },
            category: {
               type: "string"
            },
            **location: {
            type: "long"
            },**

         }
      }
   }
}

geo_distance字段将在location字段上实现,示例实例如下所示:

"location": [
               71,
               60
            ],

即采用geoJSON格式[lon, lat]

我了解我将必须更新索引,以使location字段的类型为geo_point,如文档(mapping-geo-
point
)中所述。似乎我必须删除索引并创建一个新索引,但是我无法做到这一点。

我在正确的轨道上吗?如果有人可以帮助我创建新索引或使用正确的数据类型更新现有索引,我将不胜感激。

非常感谢!


阅读 310

收藏
2020-06-22

共1个答案

一尘不染

一般来说,您可以使用 put映射
api(请参阅此处)更新索引映射:

curl -XPUT 'http://localhost:9200/advert_index/_mapping/advert_type' -d '
{
    "advert_type" : {
        "properties" : {

          //your new mapping properties

        }
    }
}
'

这对于添加新字段特别有用。但是,根据您的情况,您将尝试更改位置类型,这将导致 冲突 并阻止使用新的映射。

您可以使用put映射api 包含位置的 另一个属性添加 为经/纬阵列,但是您将无法更新以前的location字段本身。

最后,您将需要重新索引数据以考虑新映射。

最好的解决方案实际上是 创建一个新索引

如果创建另一个索引的问题是停机时间,则应查看别名以使工作顺利进行。

2020-06-22