簡體   English   中英

在 elasticsearch 中創建或更新映射

[英]Create or update mapping in 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]

我知道我將不得不更新我的索引,以便位置字段的類型為geo_point ,如文檔 ( mapping-geo-point ) 中所述。 似乎我必須刪除索引並創建一個新索引,但我無法做到這一點。

我在正確的軌道上嗎? 如果有人能幫助我創建新索引或使用正確的數據類型更新現有索引,我將不勝感激。

非常感謝!

一般來說,您可以使用put mapping api(參考此處)更新索引映射:

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

          //your new mapping properties

        }
    }
}
'

它對於添加新字段特別有用。 但是,在您的情況下,您將嘗試更改位置類型,這將導致沖突並阻止使用新映射。

您可以使用 put mapping api包含位置的另一個屬性添加為 lat/lon 數組,但您將無法更新先前的位置字段本身。

最后,您必須重新索引您的數據才能將新映射考慮在內。

最好的解決方案真的是創建一個新的索引

如果您創建另一個索引的問題是停機時間,您應該查看別名以使事情順利進行。

請注意,此答案中提供的網址有誤:

對於 PUT 映射請求:url 應如下所示:

http://localhost:9200/name_of_index/_mappings/document_type

並不是

http://localhost:9200/name_of_index/document_type/_mappings

在更高的 Elasticsearch 版本 (7.x) 中,類型被刪除。 更新映射可以變成:

curl -XPUT "http://localhost:9200/test/_mapping" -H 'Content-Type: application/json' -d'{
  "properties": {
    "new_geo_field": {
      "type": "geo_point"
    }
  }
}'

正如其他人指出的那樣,如果該字段存在,您通常必須重新 索引 也有例外,例如添加新的子字段或更改分析設置。

您不能“創建映射”,因為映射是使用索引創建的。 通常,您會在創建索引(或通過索引模板)時定義映射:

curl -XPUT "http://localhost:9200/test" -H 'Content-Type: application/json' -d'{
  "mappings": {
    "properties": {
      "foo_field": {
        "type": "text"
      }
    }
  }
}'

這是因為,至少在生產中,您希望避免讓 Elasticsearch “猜測”新字段。 這就是產生這個問題的原因:地理數據被讀取為一個long值數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM