2013-04-22 11 views
10

Ich versuche, einen Ansatz zum Löschen aller Einträge für eine bestimmte Eigenschaft in einem ElasticSearch-Index zu finden und alle Typzuordnungen für diese Eigenschaft zu entfernen.Elasticsearch Löschen Mapping-Eigenschaft

Ich habe auf den beiden folgenden doc Seiten suchen: put mapping und delete mapping

Von zweiten Link:.

„Erlauben Sie eine Zuordnung (Typ) zusammen mit seinen Daten löschen Der REST Endpunkt ist/{index}/{type} mit der DELETE-Methode. "

Was ich glaube ich brauche ist ein /{index}/{type}/{property}?

Muss ich den gesamten Index neu erstellen, um das zu erreichen, d. H. Daten zwischen den Typen verschieben und bearbeiten?

Zum Beispiel Aufruf GET auf der Abbildung:

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

Ergebnis:

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

nach diesem Löschvorgang auf propVal3 zurückkehren würde:

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

Ergebnis:

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

und alle Daten für propVal3 würden durch den Index entfernt werden.

Antwort

15

Sie können das nicht tun. Vergiss einfach, dass dieser Wert existiert ... ;-) Wenn du es wirklich entfernen musst, musst du deine Dokumente neu indizieren.

+0

Danke für die Antwort. Ich denke, ich werde das tun müssen. Was ist die beste Strategie, um dies durch "Reindexing" zu erreichen? Ich weiß, dass das ein Performance-Albtraum sein wird ... aber welche Strategie würdest du hier nehmen? Wird zu einem anderen Typ gewechselt (Eigenschaft in Prozess entfernen) und wieder eine Option? –

+0

Erstellt eine Follow-up zu dieser Frage: http://StackOverflow.com/Questions/16159902/elasticsearch-Reindex-oder-flag-Deleted-type-property –

+0

Warum sagt die Dokumentation, dass es möglich ist?Oder habe ich es falsch verstanden? – brupm

3

Es ist derzeit nicht möglich, eine Eigenschaft aus einem Mapping zu entfernen. Um alle Werte einer Eigenschaft aus allen Datensätzen zu entfernen, müssen Sie alle Datensätze, für die diese Eigenschaft entfernt wurde, erneut indizieren.

+0

Wie ändern Du machst das? –

+1

@TheRedPea mit [Reindex API] (https://www.elastic.co/guide/en/elasticsearch/reference/2.3/docs-reindex.html) zum Beispiel oder einer von vielen Reindex-Skripten für elasticsearch. – imotov

2

Sie können die neuen _reindex api für diesen, könnte man sogar ein neues _mapping zum dest Index setzen, bevor die reindex ausgeführt, so dass Sie die Eigenschaften der Felder Ihres Index in ändern können.

ein reindex zu tun und eine Eigenschaft entfernen, können Sie dies tun:

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

, wenn Sie dies in Kombination mit dem _aliases API verwenden würden Sie Indizes ohne jede Auszeiten

Verwandte Themen