2016-03-26 9 views
1

Ich versuche Elasticsearch in meiner Bewerbung für Volltextsuche und zu diesem Zeitpunkt zu verwenden Ich versuche Verwendung autocomplete analyser:Feder-data-Elasticsearch - Registrierung eigener Analysator

{ 
    "settings": { 
     "number_of_shards": 1, 
     "analysis": { 
      "filter": { 
       "autocomplete_filter": { 
        "type": "edge_ngram", 
        "min_gram": 1, 
        "max_gram": 20 
       } 
      }, 
      "analyzer": { 
       "autocomplete": { 
        "type": "custom", 
        "tokenizer": "standard", 
        "filter": [ 
         "lowercase", 
         "autocomplete_filter" 
        ] 
       } 
      } 
     } 
    } 
} 

Da meine Anwendung konstruiert wurde mit Frühling, ich habe den Einsatz Frühling-data-Elasticsearch entschieden und kartiert mein Unternehmen auf diese Weise:

@Document(indexName = "estabelecimento") 
@Setting(settingPath = "/elasticsearch/autocomplete-analyser.json") 
public class ESEstabelecimento { 

    private Long id; 
    @Field(type = FieldType.String, indexAnalyzer = "autocomplete") 
    private String nome; 
    private String razaoSocial; 
    private String tipoEstabelecimento; 
    @Field(type = FieldType.Object) 
    private ESCidade cidade; 
} 

jedoch Elasticsearch nicht lädt den eigenen Analysator:

[DEBUG] org.elasticsearch.action.admin.indices.mapping.put - [Magus] konnte keine Mappings auf Indizes setzen [[estabelecimento]], type [esestabelecimento] org.elasticsearch.index.mapper.MapperParsingException: Analyzer [autocomplete] wurde nicht gefunden für field [nome] bei org.elasticsearch.index.mapper.core.TypeParers.parseField (TypeParsers.java:220) ~ [elasticsearch-1.5.2.jar: na] bei org.elasticsearch .index.mapper.core.StringFieldMapper $ TypeParser.parse (StringFieldMapper.java:153) ~ [Elasticsearch-1.5.2.jar: na] bei org.elasticsearch.index.mapper.object.ObjectMapper $ TypeParser.parseProperties (ObjectMapper .java: 290) ~ [elasticsearch-1.5.2.jar: na] bei org.elasticsearch.index.mapper.object.ObjectMapper $ TypeParser.parseObjectOrDocumentTypeProperties (ObjectMapper.java:214) ~ [elasticsearch -1.5.2.jar: na] bei org.elasticsearch.index.mapper.object.RootObjectMapper $ TypeParser.parse (RootObjectMapper.java:136) ~ [elasticsearch-1.5.2.jar: na] bei org.elasticsearch .index.mapper.DocumentMapperParser.parse (DocumentMapperParser.java:211) ~ [Elasticsearch-1.5.2.jar: na] bei org.elasticsearch.index.mapper.DocumentMapperParser.parseCompressed (DocumentMapperParser.java:192) ~ [Elasticsearch -1.5.2.jar: na] bei org.elasticsearch.index.mapper.MapperService.parse (MapperService.java:434) ~ [Elasticsearch-1.5.2.jar: na] bei org.elasticsearch.cluster.metadata .MetaDataMappingService $ 4.Führen (MetaDataMappingService.java:505) ~ [Elasticsearch-1.5.2.jar: na] bei org.elasticsearch.cluster.service.InternalClusterService $ UpdateTask.run (InternalClusterService.java:365) ~ [elasticsearch- 1.5.2.jar: na] bei org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor $ TieBreakingPrioritizedRunnable.runAndClean (PrioritizedEsThreadPoolExecutor.java:188) [Elasticsearch-1.5.2.jar: na] bei org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor $ TieBreakingPrioritizedRunnable .run (PrioritizedEsThreadPoolExecutor.java:158) [elasticsearch-1.5.2.jar: na] bei java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) [na: 1.8.0_77] bei java.util .concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) [na: 1.8.0_77] bei java.lang.Thread.run (Thread.java:745) [na: 1.8.0_77] [FEHLER] org .springframework.data.elasticsearch.repository.support.AbstractElasticsearchRepository - Fehler beim Laden der elastischen Suchknoten: org.elasticsearch.index.mapper.MapperParsingException: Analyzer [a utocomplete] nicht für das Feld [nome gefunden]

ich die Ursache des Problems nicht erkennen kann, weiß ich nicht, ob der Analysator ungültig ist oder Elasticsearch fand sogar die Autocomplete-analyser.json Datei. Wie kann ich das lösen?

+1

Haben Sie den Index zwischen den Versuchen entfernt? Es wird nur den Index erstellen, wenn er noch nicht vorhanden war. Wenn der Index bereits vorhanden war, werden die Einstellungen nicht aktualisiert. Entfernen Sie zuerst den Index und lassen Sie die Feder neu erstellen. Sie können die Einstellungen auch mit GET/aestelecimento/_settings überprüfen, vielleicht gibt das einen Einblick. –

Antwort

1

Nach einigen Recherchen Gelöst hilft ich entdeckt habe, Problem wurde durch diese Erklärung verursacht:

Ich habe diese Erklärung entfernt und es begann die Konfiguration zu bekommen.

2

Ich denke, Sie müssen das Feld "settings": von JSON-Datei und nur den Inhalt setzen entfernen.

Statt mit:

{ 
"settings": { 
    .... 
    } 
} 

Verwenden Sie einfach:

{ 
"index": { 
"number_of_shards": 1, 
"analysis": { 
    "filter": { 
    "autocomplete_filter": { 
     "type": "edge_ngram", 
     "min_gram": 1, 
     "max_gram": 20 
    } 
    }, 
    "analyzer": { 
    "autocomplete": { 
     "type": "custom", 
     "tokenizer": "standard", 
     "filter": [ 
     "lowercase", 
     "autocomplete_filter" 
     ] 
    } 
    } 
    } 
    } 
} 

Hoffe, dass es Ihnen ..

+0

versuchte dies, aber hat nicht funktioniert ... – brevleq

+0

Bitte versuchen Sie die neueste bearbeitete JSON .. – Richa

+0

gleichen Ergebnis ... Gibt es eine Möglichkeit, ich kann @Setting debuggen? Ich denke, das Problem könnte dort sein ... – brevleq