2017-04-03 13 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); 
関連する問題