1

我想建一個建議者查詢喜歡這裏描述: https://www.elastic.co/guide/en/elasticsearch/reference/2.4/search-suggesters.html#search-suggesters如何使用spring-data-elasticsearch創建建議者查詢?

{ 
    "query" : { 
    ... 
    }, 
    "suggest" : { 
    ... 
    } 
} 

我怎樣才能做到這一點與彈簧數據elasticsearch?我在NativeSearchQueryBuilder類中找不到這種查詢的setter。

我不想使用本地json,因爲在使用構建器模式構建複雜查詢時會感到不舒服。

+1

使用'ElasticsearchTemplate.suggest()'和傳遞一個'SuggestBuilder'您可以創建一個提示查詢。 – Val

+0

@Val如果我需要與我的問題示例中描述的查詢相結合的提示,該怎麼辦?我需要結合同一級別的建議進行查詢。 – whitenexx

回答

1

隨着短的例子 - 具有以下對sample索引和test類型映射:

"test": { 
    "properties": { 
     "description": {"type": "keyword"} 
    } 
} 

和文檔索引:

{ "description": "blue sky"} 

我想有一個查詢:

{ 
    "query" : { 
    "match": { 
     "description": "blue sky" 
    } 
    }, 
    "suggest" : { 
    "my-suggest-1" : { 
     "text" : "blue sk", 
     "term" : { 
     "field" : "description" 
     } 
    } 
    } 
} 

在Java API中,您需要添加bool查詢和sug GESTION到SearchRequestBuilder

BoolQueryBuilder boolQuery = QueryBuilders.boolQuery() 
       .must(QueryBuilders.matchQuery ("description", "blue sky")); 

SuggestionBuilder suggestionBuilder = 
    new TermSuggestionBuilder("description").text("blue sk");     
SuggestBuilder suggestion = 
    new SuggestBuilder().addSuggestion("my-suggest-1", suggestionBuilder); 

SearchRequestBuilder builder = client.prepareSearch("sample") 
     .setTypes("test") 
     .setQuery(boolQuery) 
     .suggest(suggestion); 

SearchResponse searchResponse; 
try { 
    searchResponse = builder.execute().get(); 

    for (SearchHit hit : searchResponse.getHits().getHits()) { 
     LOG.info("Result: " + hit.getSourceAsString()); 
    } 
} catch (InterruptedException | ExecutionException e) { 
    LOG.error("Exception while executing query {}", e); 
} 

當您調試searchResponse對象,它看起來像這樣:

{ 
    "took":2, 
    ..., 
    "hits":{ 
     "total":1, 
     "max_score":0.2876821, 
     "hits":[ 
     { 
      "_index":"sample", 
      "_type":"test", 
      "_id":"AV1b42zWa7i_qjvIODcL", 
      "_score":0.2876821, 
      "_source":{ 
       "description":"blue sky" 
      } 
     } 
     ] 
    }, 
    "suggest":{ 
     "my-suggest-1":[ 
     { 
      "text":"blue sk", 
      "offset":0, 
      "length":7, 
      "options":[ 
       { 
        "text":"blue sky", 
        "score":0.85714287, 
        "freq":1 
       } 
      ] 
     } 
     ] 
    } 
}