2017-01-27 6 views
0

Wie empfiehlt es sich, einen elastischen Suchindex neu zu indizieren? This Post hat einige Schritte, die das Stoppen des Logstash-Indexers vor dem Neuindizieren eines Indexes beinhaltet, aber das ist für mich keine Option als Produktionsserver.Reindexierung eines Elasticsearch-Index - ELK

Ich hatte ein Problem, wo keine * .raw Felder in einem Index wegen fehlender Standardzuordnungsvorlage waren. Ich habe die Mapping-Vorlage von Elasticsearch gefunden here und konfiguriert meine ES-Cluster, um es zu verwenden, aber ich denke, es wird nur verwendet, wenn entweder ein neuer Index erstellt wird oder wenn ich einen vorhandenen Index explizit neu indizieren.

Auch /_template?pretty ergab eine leere Antwort zurück, aber nach dem Hinzufügen der oben genannten Vorlage /_template?pretty enthüllt eine neue Vorlage, aber wird der neue Index, der erstellt werden würde, diese neue Vorlage automatisch verwenden? Oder muss ich ES explizit konfigurieren, um es zu verwenden?

Ich würde wirklich etwas Hilfe hier schätzen.

Antwort

1

Der beste Weg, dies zu tun, ist ein Alias, der auf Ihren tatsächlichen Index zeigt. (https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html), so etwas wie my-index-alias zeigt auf my-actual-index-20170101

POST /_aliases 
{ 
    "actions" : [ 
     { "add" : { "index" : "my-actual-index-20170101", "alias" : "my-index-alias" } } 
    ] 
} 

Wenn Sie abfragen (oder stopft hinzufügen) zu Ihrem Index, können Sie immer den Alias-Namen verwenden.

Wenn Sie eine Neuindizierung durchführen müssen, führen Sie eine Neuindizierung in einem anderen Index durch (Beispiel: my-actual-index-20170127). Wenn die Neuindizierung abgeschlossen ist, aktualisieren Sie den Alias ​​so, dass er auf den neuen Index verweist.

POST /_aliases 
{ 
    "actions" : [ 
     { "remove" : { "index" : "my-actual-index-20170101", "alias" : "my-index-alias" } }, 
     { "add" : { "index" : "my-actual-index-20170127", "alias" : "my-index-alias" } } 
    ] 
} 

Damit können Sie einen Index neu indizieren, ohne Code zu ändern/Ausfallzeiten zu haben.

Nun, in Bezug auf die tatsächliche Reindexing Problem-- Ich habe die Knoten App mit viel Erfolg (https://www.npmjs.com/package/elasticsearch-reindex).

Seine Verwendung ist einfach:

, nachdem es mit npm (npm install -g elasticsearch-reindex) installiert haben, können Sie einfach laufen

elasticsearch-reindex -f http://localhost:9200/my-actual-index-20170101/{type of documents} -t http://localhost:9200/my-actual-index-20170127