Подтвердить что ты не робот

Создание или обновление отображения в 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": [
               71,
               60
            ],

т.е. находится в формате geoJSON [lon, lat].

Я понимаю, что мне нужно будет обновить свой индекс, чтобы поле местоположения имело тип geo_point, как описано в документации (mapping-geo-point). Кажется, я должен отбросить индекс и создать новый, но я не могу этого сделать.

Я на правильном пути? Я был бы очень признателен, если бы кто-нибудь мог помочь мне в том, как я могу создать новый индекс или обновить существующий с правильным типом данных.

Большое спасибо!

4b9b3361

Ответ 1

В общем случае вы можете обновить сопоставление индексов с помощью сопоставления put api (ссылка здесь):

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

          //your new mapping properties

        }
    }
}
'

Это особенно полезно для добавления новых полей. Однако в вашем случае вы попытаетесь изменить тип местоположения, что приведет к конфликту и предотвратит использование нового сопоставления.

Вы можете использовать сопоставление put api для добавить другое свойство, содержащее это местоположение в качестве массива lat/lon, но вы не сможете обновить предыдущее поле местоположения.

Наконец, вам нужно будет повторно проиндексировать свои данные для вашего нового сопоставления, которое необходимо принять во внимание.

Лучшим решением будет действительно создать новый индекс.

Если ваша проблема с созданием другого индекса - время простоя, вы должны взглянуть на aliases, чтобы все было гладко.