Jak zmienić typ pola w ElasticSearch?

Jak zmienić typ pola w ElasticSearch?
Korzystając z interfejsu API mapowania, możesz zaktualizować istniejące pola lub dodać nowe pola do istniejącego indeksu.

NOTATKA: Aby przeprowadzić zmiany w indeksie, upewnij się, że masz uprawnienia zarządzania w indeksie docelowym.

Podstawowe użycie

Aby zmodyfikować typ pola, wyślij żądanie PUT do interfejsu API „Mapping”, a następnie organu żądania. Ciało żądania zawiera parametr właściwości i mapowanie pola docelowego. Podczas tworzenia nowego pola upewnij się, że podajesz nazwę pola, typu i parametrów mapowania.

Na przykład następujące żądanie zmienia typ pola z liczby całkowitej na długie.

PUT /MY-INDEX /_MAPPAPPIĘ

"nieruchomości":
"Cena podstawowa":
„Typ”: „Long”


Po pomyślnym zakończeniu należy postrzegać dane wyjściowe jako:


„Uznany”: prawda

Metoda ponownego indeksowania

W większości przypadków ElasticSearch uniemożliwi aktualizację typu pola istniejącego indeksu. Może to prowadzić do tego, że obecne dane stają się nieprawidłowe i spowodować błędy w indeksie.

Jeśli nadal chcesz zaktualizować rodzaj istniejącego pola, możesz to zrobić w kilku prostych krokach.

  1. Utwórz nowy indeks z prawidłowymi informacjami o mapowaniu, w którym typ pola jest zmieniany na żądany typ.
  2. Ponownie indeks dane ze starego indeksu do nowego indeksu.
  3. Usuń stary indeks

Korzystanie z tej metody pozwala skrócić minimalne przestoje dla swojego indeksu.

Tworzenie starego indeksu

Zacznijmy od utworzenia indeksu z niepoprawnym typem pola.

Put /Change-Me

„Mapowania”:
"nieruchomości":
"ID":
„Typ”: „Integer”
,
"nazwa użytkownika":
"Wpisz tekst"



W powyższym przykładzie mamy prosty indeks z dwoma dziedzinami: id i nazwa użytkownika. Typy pola to odpowiednio liczba całkowita i tekst.

Załóżmy, że pole zawiera dane, jak pokazano w następującym zapytaniu:

Post /Change-Me /_doc


„ID”: 1000,
„Nazwa użytkownika”: „root”

Post /Change-Me /_doc

„ID”: 1001,
„Nazwa użytkownika”: „Inne”

Dwa powyższe zapytania utworzą dokument z danymi podanymi w ciele żądania.

Upewnij się, że dane istnieją:

Get /Change-Me /_search?ładny

"zapytanie":
„Match_All”:

Powinniśmy zobaczyć dwie rekordy, jak pokazano:

Utwórz nowy indeks

Powiedzmy, że chcemy zmienić pole identyfikatora z całkowitej na słowo kluczowe. Zaczniemy od utworzenia nowego indeksu z typem jako słów kluczowych.

Put /Change-Me-Reindex

„Mapowania”:
"nieruchomości":
"ID":
„Typ”: „Słowo kluczowe”
,
"nazwa użytkownika":
"Wpisz tekst"



W powyższym żądaniu tworzymy nowy indeks i ustawiamy typ identyfikatora na słowo kluczowe.

Ponownie indeks stare dane

Następnym krokiem jest ponowne indeksowanie danych ze starego indeksu do nowego za pomocą API reindex. Prośba o to jest poniżej:

Post /_reindex

"źródło":
„indeks”: „zmiana-me”
,
„dest”:
„indeks”: „zmiana-me-reindex”

Powyższe żądanie skopiuje dokumenty ze starego indeksu do nowego, w którym typ pola zmienia się z całkowitej na słowo kluczowe.

Wyjście z powyższego zapytania:


„wziął”: 8,
„timed_out”: false,
„Total”: 4,
„Zaktualizowano”: 0,
„Creed”: 4,
„Usunięty”: 0,
„Partie”: 1,
„Version_conflicts”: 0,
„Noops”: 0,
„Próby”:
„Bulk”: 0,
„Wyszukaj”: 0
,
„Drottled_millis”: 0,
„requests_per_second”: -1.0,
„Drottled_until_millis”: 0,
„Awarie”: []

Usuń stary indeks

Teraz, gdy mamy zaktualizowany indeks z prawidłowym mapowaniem, nadszedł czas, aby usunąć stary indeks. Możemy to zrobić, wysyłając żądanie usunięcia do indeksu jako:

Usuń /Change-Me

Po pomyślnym usunięciu należy postrzegać wyjście jako:


„Uznany”: prawda

Utwórz alias indeksu

Jeśli miałeś aplikacje za pomocą starego indeksu, mogą przestać działać, ponieważ już nie istnieje.

Możemy to rozwiązać, tworząc alias dla nowego indeksu o nazwie starego indeksu.

Put/Change-Me-Reindex/_alias/Change-Me

Powyższe żądanie powinno utworzyć alias dla nowego indeksu.

Wniosek

W tym przewodniku odkryłeś, jak zmienić rodzaj istniejącego pola w indeksie ElasticSearch.