2017-05-28 3 views
1

Ich verwende Embedded Elasticsearch mit Spring Boot und ich habe versucht, Anmerkungen zum Konfigurieren von Einstellungen und Zuordnungen zu verwenden. Ich folgte diesem Tutorial, der erklärt, wie man das Suchen über mehrfachen Feldern einsetzt. Wie auch immer, ich habe die Einstellungen.json und die Mappings.json in meiner Dokumenteinheit wie beschrieben beschrieben here aber es scheint, als ob es nicht liest die Dateien, weil ing die Mappings nicht die entsprechende Konfiguration wie in den Dateien definiert zurückgibt .Federdaten elasticsearch: Einstellungen und Zuordnung config mit Anmerkungen funktioniert nicht

Die Indexierung wurde durch einen Spring-Batch-Prozess ausgeführt. Es liest Daten aus der Datenbank und schreibt sie in elasticsearch. Das funktioniert perfekt.

ich keine Ergebnisse (sollte 7 Artikel zurück), wenn ich eine POST-Anforderung an http://localhost:9200/profile/_search machen:

{ 
    "size": 10, 
    "query": { 
     "match": { 
     "_all": { 
      "query": "user male", 
      "operator": "and" 
     } 
    } 
    } 
} 

Wenn ich die Abfrage „user5“ ändern sie den Benutzer mit diesem Spitznamen zurückgibt.

Ich werde schätzen, wenn jemand mir einen Hinweis geben kann. Was ist falsch an der Konfiguration?

Die Konfiguration

@Configuration 
@EnableElasticsearchRepositories(basePackages ="com.company.searchengine.repository") 
public class ElasticSearchConfiguration { 
    @Value("${elasticsearch.clustername}") 
    private String esClusterName; 

    @Bean 
    public ElasticsearchOperations elasticsearchTemplate() throws IOException { 
     return new ElasticsearchTemplate(nodeBuilder().local(true).clusterName 
      (esClusterName).node() 
      .client()); 
    } 
} 

Das Dokument

@EqualsAndHashCode(of = "uuid") 
@ToString(exclude = "uuid") 
@NoArgsConstructor(onConstructor = @__({@JsonCreator})) 
@Getter 
@Setter 
@Document(indexName = "profiles", type = "profile", createIndex = false) 
@Setting(settingPath = "/settings/settings.json") 
@Mapping(mappingPath = "/mappings/mappings.json") 
public class IndexedProfile { 
    @Id 
    @NonNull 
    private String uuid; 
    @NonNull 
    //@Field(index = FieldIndex.not_analyzed, type = FieldType.String) 
    private String nickname; 
    @NonNull 
    //@Field(index = FieldIndex.not_analyzed, type = FieldType.String) 
    private String gender; 
    //@Field(index = FieldIndex.not_analyzed, type = FieldType.String) 
    private String about; 
    private GeoPoint location; 
    @Field(type = FieldType.Date, format = DateFormat.year_month_day) 
    private Date birthdate; 
} 

Der Batch-Job

@Override 
public void write(List<? extends IndexedProfile> items) throws Exception { 
    List<IndexQuery> indexQueries = items.stream() 
      .map(item -> new IndexQueryBuilder().withObject(item).withId(String.valueOf(item.getUuid()))) 
      .map(builder -> builder.withType(DOCUMENT_TYPE)) 
      .map(builder -> builder.withIndexName(INDEX_NAME + runId)) 
      .map(IndexQueryBuilder::build) 
      .collect(Collectors.toList()); 

    this.elasticsearchTemplate.bulkIndex(indexQueries); 
} 

Die Einstellungen

{ 
    "settings": { 
     "analysis": { 
      "filter": { 
       "nGram_filter": { 
        "type": "nGram", 
        "min_gram": 2, 
        "max_gram": 20, 
        "token_chars": [ 
         "letter", 
         "digit", 
         "punctuation", 
         "symbol" 
        ] 
      } 
     }, 
     "analyzer": { 
      "nGram_analyzer": { 
       "type": "custom", 
       "tokenizer": "whitespace", 
       "filter": [ 
         "lowercase", 
         "asciifolding", 
         "nGram_filter" 
       ] 
     }, 
     "whitespace_analyzer": { 
      "type": "custom", 
      "tokenizer": "whitespace", 
      "filter": [ 
        "lowercase", 
        "asciifolding" 
      ] 
     } 
     } 
    } 
    } 
} 

Mappings

{ 
    "mappings": { 
     "profile": { 
      "_all": { 
       "index_analyzer": "nGram_analyzer", 
       "search_analyzer": "whitespace_analyzer" 
      }, 
      "nickname": { 
       "type": "string", 
       "index": "not_analyzed" 
      }, 
      .... 
     } 
    } 

Antwort

Verwandte Themen