wake-up-neo.com

So kopieren Sie einige ElasticSearch-Daten in einen neuen Index

Nehmen wir an, ich habe Filmdaten in meiner ElasticSearch und habe sie so erstellt:

curl -XPUT "http://192.168.0.2:9200/movies/movie/1" -d'
{
    "title": "The Godfather",
    "director": "Francis Ford Coppola",
    "year": 1972
}'

Und ich habe eine Reihe von Filmen aus verschiedenen Jahren. Ich möchte alle Filme eines bestimmten Jahres (also 1972) kopieren und in einen neuen Index von "70sMovies" kopieren, aber ich konnte nicht sehen, wie das geht.

39
cybergoof

Der beste Ansatz wäre die Verwendung des Elasticsearch-Dump-Tools https://github.com/taskrabbit/elasticsearch-dump .

Das reale Beispiel, das ich verwendet habe:

elasticdump \
  --input=http://localhost:9700/.kibana \
  --output=http://localhost:9700/.kibana_read_only \
  --type=mapping
elasticdump \
  --input=http://localhost:9700/.kibana \
  --output=http://localhost:9700/.kibana_read_only \
  --type=data
44
KWubbufetowicz

Seit ElasticSearch 2.3 können Sie jetzt die integrierte _reindex-API verwenden

zum Beispiel:

POST /_reindex
{
  "source": {
    "index": "Twitter"
  },
  "dest": {
    "index": "new_Twitter"
  }
}

Oder nur einen bestimmten Teil durch Hinzufügen eines Filters/einer Abfrage

POST /_reindex
{
  "source": {
    "index": "Twitter",
    "query": {
      "term": {
        "user": "kimchy"
      }
    }
  },
  "dest": {
    "index": "new_Twitter"
  }
}

Lesen Sie mehr: https://www.elastic.co/guide/de/elasticsearch/reference/current/docs-reindex.html

76

Schauen Sie sich den Rucksack an: https://github.com/jprante/elasticsearch-knapsack

Sobald Sie das Plugin installiert haben und funktionsfähig sind, können Sie einen Teil Ihres Index per Abfrage exportieren. Zum Beispiel:

curl -XPOST 'localhost:9200/test/test/_export' -d '{
"query" : {
    "match" : {
        "myfield" : "myvalue"
    }
},
"fields" : [ "_parent", "_source" ]
}'

Dadurch wird ein Archiv mit nur Ihren Abfrageergebnissen erstellt, das Sie dann in einen anderen Index importieren können.

5
coffeeaddict

Der einfachste Weg, dies zu tun, besteht darin, Code mit der API Ihrer Wahl zu schreiben, nach "year": 1972 abzufragen und diese Daten dann in einen neuen Index zu indexieren. Sie können die Such-API oder die Scan- und Scroll-API verwenden, um alle Dokumente abzurufen und sie dann entweder einzeln zu indizieren oder die Massen-API zu verwenden:

http://www.elasticsearch.org/guide/de/elasticsearch/reference/current/search-search.html

http://www.elasticsearch.org/guide/de/elasticsearch/reference/current/search-request-scroll.html

http://www.elasticsearch.org/guide/de/elasticsearch/reference/current/docs-index_.html

http://www.elasticsearch.org/guide/de/elasticsearch/reference/current/docs-bulk.html

Angenommen, Sie möchten dies nicht über Code tun, sondern suchen nach einem direkten Weg, schlage ich die Elasticsearch-Momentaufnahme und -wiederherstellung vor. Grundsätzlich würden Sie einen Snapshot Ihres vorhandenen Indexes erstellen, ihn in einen neuen Index wiederherstellen und dann den Befehl Löschen verwenden, um alle Dokumente mit einem anderen als 1972 zu löschen.

Momentaufnahme und Wiederherstellung

Mit dem Snapshot- und Restore-Modul können Snapshots von .__ erstellt werden. einzelne Indizes oder einen gesamten Cluster in ein Remote-Repository. Beim Der Zeitpunkt des ersten freigegebenen Dateisystem-Repositorys für die erste Version war unterstützt, aber jetzt gibt es eine Reihe von Backends über offiziell Unterstützte Repository-Plugins.

http://www.elasticsearch.org/guide/de/elasticsearch/reference/current/modules-snapshots.html

Nach Abfrage-API löschen

Mit der Lösch-durch-Abfrage-API können Dokumente aus einem oder mehreren Indizes und einen oder mehrere Typen basierend auf einer Abfrage. Die Abfrage kann entweder mit einer einfachen Abfragezeichenfolge als Parameter oder mit der .__-Angabe bereitgestellt werden. Abfrage-DSL innerhalb des Anforderungstextes definiert.

http://www.elasticsearch.org/guide/de/elasticsearch/reference/current/docs-delete-by-query.html

2
John Petrone

Mit elasticsearch-dump ( https://github.com/taskrabbit/elasticsearch-dump ) ist dies in drei Schritten problemlos möglich. Im folgenden Beispiel kopiere ich den Index "thor" nach "thor2"

elasticdump --input=http://localhost:9200/thor --output=http://localhost:9200/thor2 --type=analyzer

elasticdump --input=http://localhost:9200/thor --output=http://localhost:9200/thor2 --type=mapping

elasticdump --input=http://localhost:9200/thor --output=http://localhost:9200/thor2 --type=data
2
jpereira

Um einen bestimmten type vom Quellindex zum Zielindex type zu sortieren, ist die Syntax

POST _reindex/
 {
 "source": {
 "index": "source_index",
 "type": "source_type",
 "query": {
  // add filter criteria
   }
 },
 "dest": {
  "index": "dest_index",
  "type": "dest_type"
  }
}
1