[英]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
並不是
在更高的 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.