2017-03-15 3 views
0

Ich bin auf der Suche nach einem Abfragefilter in Java für Elsaticsearch 5.2 zu einem der Schlüsselwörter, ob sie Autor geliefert oder System generiert übereinstimmen. Ich versuche, einen Platzhalterpfad zu erstellen, gibt jedoch keine Ergebnisse zurück. Ich verwende das standardmäßige dynamische Mapping in Elasticsearch.Elasticsearch Wildcard in Pfad für Match Abfrage

{ 
    "content": { 
     "title": "The History of Cats", 
     "description": "A brief history of cats.", 
     "keywords": { 
      "author": ["cat"], 
      "system": ["felis", "animalia"] 
     } 
    } 
} 

Idealfall, wenn ein Nutzer nach dem Stichwort cat oder felis sie einen Hit auf dieser Platte erhalten sollen. Momentan erhalte ich keine Treffer. Ist das etwas, das durch diesen Abfrage-Generator oder einen anderen erreicht werden kann? Muss ich Mappings optimieren?

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery(); 
queryBuilder.filter(QueryBuilders.matchQuery("content.keywords.*", keyword)); 

SearchRequestBuilder searchRequestBuilder = this.client.prepareSearch("my-index") 
       .setTypes("article") 
       .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) 
       .setQuery(queryBuilder) 
       .setFrom(0) 
       .setSize(10) 
       .addSort(SortBuilders.scoreSort()); 

SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); 

return searchResponse; 

Dank Drew

Antwort

0

Nach einigem Graben, kann dies durch eine Änderung der Übereinstimmungsabfrage zu einem Multi-Spiel Abfrage

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery(); 
queryBuilder.filter(QueryBuilders.multiMatchQuery(keyword, "content.keywords.*")); 

SearchRequestBuilder searchRequestBuilder = this.client.prepareSearch("my-index") 
       .setTypes("article") 
       .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) 
       .setQuery(queryBuilder) 
       .setFrom(0) 
       .setSize(10) 
       .addSort(SortBuilders.scoreSort()); 

SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); 

return searchResponse; 
erreicht werden
Verwandte Themen