2017-04-03 2 views
1

Elasticsearch Java API로 검색 하이라이트를 얻으려면 무엇이 필요합니까?Elasticsearch를 얻는 방법 5.2.2 Java API로 작업하는 검색 강조 표시

는 내가 쿼리를 구성하는 데 사용하고 코드는 다음과 유사

:

{ 
    "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() 방법 :

 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); 

쿼리를 덤핑이 같이 보입니다 각 히트는 빈 맵을 반환합니다.

답변

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); 
관련 문제