2016-04-20 10 views
0

Ich versuche, den folgenden Index und das Mapping zu erstellen.MapperParsingException creating elasticsearch index

CreateIndexRequestBuilder createIndexRequestBuilder = client.admin().indices().prepareCreate("my_index"); 



      XContentBuilder mappingBuilder = jsonBuilder() 
        .startObject() 
         .startObject("my_type") 
          .startObject("properties") 
           .startObject("nombre") 
            .field("analyzer", "keyword_lowercase") 
            .field("type", "string")          
           .endObject()         
           .startObject("codigo") 
            .field("type", "string") 
            .field("analyzer", "keyword_lowercase") 
           .endObject()         
          .endObject() 
         .endObject() 
        .endObject(); 

      createIndexRequestBuilder.addMapping(document.type(), mappingBuilder); 


      XContentBuilder mappingSettingsBuilder = jsonBuilder() 
        .startObject()       
          .startObject("index") 
           .startObject("analisis") 
            .startObject("analyzer") 
             .startObject("keyword_lowercase") 
              .field("type","custom") 
              .field("tokenizer","keyword") 
              .array("filter", "lowercase") 
             .endObject() 
            .endObject() 
           .endObject() 
          .endObject()        
        .endObject(); 

      createIndexRequestBuilder.setSettings(mappingSettingsBuilder); 


      createIndexRequestBuilder.execute().actionGet(); 

Aber ich erhalte die folgende Ausnahme:

org.elasticsearch.index.mapper.MapperParsingException: Analysator [keyword_lowercase] nicht für Feld gefunden [codigo]

Ich denke, ich muss den Index in irgendeiner Weise schließen/öffnen, um Erfolg zu haben, aber ich weiß nicht wann ... Ich habe mehrere Dinge ohne Erfolg getestet. Irgendeine Idee?

Vielen Dank im Voraus

+0

Dies festgesetzt werden: '.startObject ("analisis")' in '.startObject ("Analyse")' – Val

Antwort

0

Ich denke, ist nicht möglich, Mapping und Index in separaten Thread zu tun, wenn wir api erstellen arre verwenden. Die Lösung ist es, als gleichzeitig tun:

 XContentBuilder mappingCreateBuilder = jsonBuilder() 
       .startObject() 
        .startObject("mappings") 
         .startObject(document.type()) 
          .startObject("properties") 
           .startObject("nombre") 
            .field("analyzer", "keyword_lowercase") 
            .field("type", "string")          
           .endObject()         
           .startObject("codigo") 
            .field("type", "string") 
            .field("analyzer", "keyword_lowercase") 
           .endObject()         
          .endObject() 
         .endObject() 
        .endObject() 
        .startObject("settings") 
         .startObject("index") 
          .startObject("analisis") 
           .startObject("analyzer") 
            .startObject("keyword_lowercase") 
             .field("type","custom") 
             .field("tokenizer","keyword") 
             .array("filter", "lowercase") 
            .endObject() 
           .endObject() 
          .endObject() 
         .endObject() 
        .endObject() 
       .endObject(); 

     createIndexRequestBuilder = client.admin().indices().prepareCreate(document.indexName()); 

     createIndexRequestBuilder.setSettings(mappingCreateBuilder); 
     createIndexRequestBuilder.execute().actionGet(); 
+0

Wie ich in einem anderen Beitrag erwähnt, '. startObject ("analisis") 'sollte eigentlich' .startObject ("analyse") 'sein. –

+0

Meine Antwort war falsch. Val hatte Recht. Ich shchange Änderung Analyse durch Analyse –

+0

Danke Andrei und Val. Beide hatten Recht –

Verwandte Themen