2017-04-03 59 views
1

獲取Elasticsearch Java API返回搜索亮點需要什麼?如何獲得Elasticsearch 5.2.2搜索突出顯示使用Java API

我使用構造查詢的代碼看起來類似於以下內容:

 final HighlightBuilder highlight = new HighlightBuilder() 
       .field("*") 
       .highlighterType("fvh"); 

     final SearchRequestBuilder request = client.prepareSearch() 
       .setTypes("mytype") 
       .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) 
       .setQuery(query) 
       .setFrom(currentPage) 
       .setSize(perPage) 
       .highlighter(highlight) 
       .addSort(orderBy.getValue(), sortOrder); 

傾銷查詢看起來是這樣的:

{ 
    "from" : 0, 
    "size" : 10, 
    "query" : { 
    "bool" : { 
     "must" : [ 
     { 
      "terms" : { 
      "my.field" : [ 
       "myvalue" 
      ], 
      "boost" : 1.0 
      } 
     } 
     ], 
     "disable_coord" : false, 
     "adjust_pure_negative" : true, 
     "boost" : 1.0 
    } 
    }, 
    "sort" : [ 
    { 
     "myotherfield1.myotherfield2.myotherfield3" : { 
     "order" : "desc" 
     } 
    } 
    ], 
    "highlight" : { 
    "type" : "fvh", 
    "fields" : { 
     "*" : { } 
    } 
    } 
} 

我得到的結果,但在.getHighlightFields()方法上每次擊中都會返回空白地圖。

回答

0

這似乎工作。這些字段需要單獨選擇,而不是使用'_all':

for(String fieldName : allFields){ 
     query.should(QueryBuilders.matchPhrasePrefixQuery(fieldName, queryText)); 
    } 
    query.minimumShouldMatch(1); 

    final HighlightBuilder highlight = new HighlightBuilder() 
      .highlighterType("plain") 
      .preTags("") 
      .postTags(""); 

    for(String fieldName : allSearchFields) { 
     highlight.field(fieldName); 
    } 

    final SearchRequestBuilder request = client.prepareSearch() 
      .setTypes("mytype") 
      .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) 
      .setQuery(query) 
      .setFrom(currentPage) 
      .setSize(perPage) 
      .highlighter(highlight) 
      .addSort(orderBy.getValue(), sortOrder); 
相關問題