2012-09-11 18 views
18

Me gustaría que la siguiente configuración y mapeo del conjunto en un índice ya existente en Elasticsearch:Cambiar la configuración y las asignaciones de índice existente en 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" 
      } 
     } 
    } 
} 

me han tratado de añadir estas dos líneas de código:

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

Pero este es el resultado:

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

cualquier persona? Muchas gracias,

Stine


Esto parece funcionar:

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

duplicado posible de [error al intentar actualizar la configuración] (http://stackoverflow.com/questions/19758335/error-when-trying-to-update-the-settings) – RASG

Respuesta

32

Si nos fijamos en la configuración después de enviar los cambios que dará cuenta de que el analizador no está allí. De hecho, no puede cambiar la sección de análisis de la configuración en un índice activo. Es mejor crear con los ajustes deseados, de lo contrario sólo se puede cerrarla:

Mientras que el índice está cerrado puede enviar la nueva configuración. Después de que se puede volver a abrir el índice:

curl -XPOST localhost:9200/index_name/_open 

Mientras que el índice se cierra, no utiliza ningún recurso de clúster, pero no se puede leer ni escribir en él. Si desea cerrar y volver a abrir el índice de uso de la API de Java se puede utilizar el siguiente código:

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

Gracias por su respuesta. – Stine

+3

Su sugerencia no funcionó para mí: después de cerrar un índice, obtengo IndexAlreadyExistsException. ElasticSearch 1.3.4 – chester89

+0

@javanna cuando vuelva a abrir el índice, ¿qué pasará? ¿Necesitará ES volver a indexar todo porque tiene un nuevo analizador? – micah

Cuestiones relacionadas