2013-04-22 16 views
10

Próbuję znaleźć sposób usunięcia wszystkich wpisów dla określonej właściwości w indeksie elasticsearch i usunąć wszystkie odwzorowania typów dla tej właściwości.Elasticsearch Usuń właściwość mapowania

czekałem na następujących dwóch stron Doc: put mapping i delete mapping

Od drugiego łącza.

„Pozwól, aby usunąć mapowanie (typ) wraz z jego danymi punktu końcowego REST to/{index}/{type} z metodą DELETE. "

Co jest mi potrzebne, to /{index}/{type}/{property}?

Czy muszę odtworzyć cały indeks, aby to osiągnąć, tj. Przenosić i manipulować danymi między typami?

Dla przykładu, nazywając dostać się na mapowaniu:

curl -XGET 'http://.../some_index/some_type/_mapping' 

wynik:

{ 
    "some_type": { 
    "properties": { 
     "propVal1": { 
     "type": "double", 
     "index": "analyzed" 
     }, 
     "propVal2": { 
     "type": "string", 
     "analyzer": "keyword" 
     }, 
     "propVal3": { 
     "type": "string", 
     "analyzer": "keyword" 
     } 
    } 
    } 
} 

po tej operacji delete na propVal3 wróci:

curl -XGET 'http://.../some_index/some_type/_mapping' 

wynik:

{ 
    "some_type": { 
    "properties": { 
     "propVal1": { 
     "type": "double", 
     "index": "analyzed" 
     }, 
     "propVal2": { 
     "type": "string", 
     "analyzer": "keyword" 
     } 
    } 
    } 
} 

i wszystkie dane dla propVal3 zostaną usunięte przez indeks.

Odpowiedz

15

Nie możesz tego zrobić. Po prostu zapomnij, że ta wartość istnieje ... ;-) Jeśli naprawdę musisz ją usunąć, będziesz musiał ponownie zindeksować swoje dokumenty.

+0

Dzięki za odpowiedź. Czuję, że będę musiał to zrobić. Jaka jest najlepsza strategia w tym celu poprzez "reindeksowanie"? Zdaję sobie sprawę, że to będzie koszmarny występ ... ale jaką strategię zabrałbyś tutaj? Czy przenosi się do innego typu (usuwanie właściwości w procesie) iz powrotem ma opcję? –

+0

Utworzono następującą odpowiedź na to pytanie: http://stackoverflow.com/questions/16159902/elasticsearch-reindex-or-flag-deleted-type-property –

+0

Dlaczego dokumentacja mówi, że jest to możliwe?A może źle to zrozumiałem? – brupm

3

Obecnie nie można usunąć właściwości z mapowania. Aby usunąć wszystkie wartości właściwości ze wszystkich rekordów, należy ponownie wyświetlić wszystkie rekordy z usuniętą tą właściwością.

+0

Jak zrobić ty to robisz? –

+1

@TheRedPea za pomocą [reindex API] (https://www.elastic.co/guide/en/elasticsearch/reference/2.3/docs-reindex.html) lub jednego z wielu skryptów reindeksowych dostępnych dla elasticsearch. – imotov

2

Do tego celu można użyć nowego interfejsu API _reindex. Przed uruchomieniem reindeksu można nawet umieścić nowy indeks _mapping w indeksie dest, aby można było zmienić właściwości pól w indeksie.

Aby wykonać reindex i usuwania nieruchomości, można to zrobić:

POST /_reindex 
{ 
    "source": { 
    "index": "twitter" 
    }, 
    "dest": { 
    "index": "new_twitter", 
    }, 
    "script": { 
    "inline": "ctx._source.remove('whatever')" 
    } 
} 

jeśli byłoby użyć to w połączeniu z _aliases API można zmodyfikować indeksy bez żadnego „przestoje”

Powiązane problemy