2012-09-11 5 views
18

Ich möchte die folgenden Einstellungen und Mapping auf einem bereits vorhandenen Index in Elasticsearch gesetzt:Ändern der Einstellungen und Zuordnungen auf vorhandenen Index in Elasticsearch

{ 
    "analysis": { 
     "analyzer": { 
      "dot-analyzer": { 
       "type": "custom", 
       "tokenizer": "dot-tokenizer" 
      } 
     }, 
     "tokenizer": { 
      "dot-tokenizer": { 
       "type": "path_hierarchy", 
       "delimiter": "." 
      } 
     } 
    } 
} 

{ 
    "doc": { 
     "properties": { 
      "location": { 
       "type": "string", 
       "index_analyzer": "dot-analyzer", 
       "search_analyzer": "keyword" 
      } 
     } 
    } 
} 

Ich habe versucht, diese beiden Zeilen Code hinzuzufügen:

client.admin().indices().prepareUpdateSettings(Index).setSettings(settings).execute().actionGet(); 
client.admin().indices().preparePutMapping(Index).setType(Type).setSource(mapping).execute().actionGet(); 

Aber das ist das Ergebnis:

org.elasticsearch.index.mapper.MapperParsingException: Analyzer [dot-analyzer] not found for field [location] 

jedermann? Vielen Dank,

Stine


Dies scheint zu funktionieren:

if (client.admin().indices().prepareExists(Index).execute().actionGet().exists()) {    
    client.admin().indices().prepareClose(Index).execute().actionGet(); 
    client.admin().indices().prepareUpdateSettings(Index).setSettings(settings.string()).execute().actionGet(); 
    client.admin().indices().prepareOpen(Index).execute().actionGet(); 
    client.admin().indices().prepareDeleteMapping(Index).setType(Type).execute().actionGet(); 
    client.admin().indices().preparePutMapping(Index).setType(Type).setSource(mapping).execute().actionGet(); 
} else { 
    client.admin().indices().prepareCreate(Index).addMapping(Type, mapping).setSettings(settings).execute().actionGet(); 
} 
+0

Mögliches Duplikat [Fehler beim Versuch, die Einstellungen zu aktualisieren] (http://stackoverflow.com/questions/19758335/Fehler beim Versuch, die Einstellungen zu aktualisieren. – RASG

Antwort

32

Wenn Sie Ihre Einstellungen aussehen, nachdem die Änderungen zu senden werden Sie feststellen, dass der Analysator nicht da ist. Tatsächlich können Sie den Analysebereich der Einstellungen in einem Live-Index nicht ändern. Besser erstellen sie mit den gewünschten Einstellungen, sonst kann man es einfach schließen:

Während der Index geschlossen wird, um die neuen Einstellungen zu senden. Danach können Sie den Index erneut öffnen:

curl -XPOST localhost:9200/index_name/_open 

Während der Index geschlossen ist es keine Cluster-Ressource nicht verwendet, aber es ist nicht lesbar noch beschreibbar ist. Wenn Sie den Index mit Hilfe der Java-API können Sie den folgenden Code verwenden, um zu schließen und wieder öffnen:

client.admin().indices().prepareClose(indexName).execute().actionGet(); 
//TODO update settings 
client.admin().indices().prepareOpen(indexName).execute().actionGet(); 
+0

Vielen Dank für Ihre Antwort. – Stine

+3

Ihr Vorschlag hat bei mir nicht funktioniert - nachdem ich einen Index geschlossen habe, bekomme ich IndexAlreadyExistsException. ElasticSearch 1.3.4 – chester89

+0

@javanna, wenn Sie den Index wieder öffnen, was wird passieren? Wird ES alles neu indizieren müssen, weil Sie einen neuen Analysator haben? – micah

Verwandte Themen