2017-09-01 15 views
0

私はElasticSearch用のJava APIを使用しています。フィールドを強調表示しようとしていますが、機能していません。検索語句と一致する正しい結果が返されているため、強調表示するコンテンツがありますが、単純には行いません。私はフィールドが強調表示されているかを確認し、Java Elastic Search:ハイライターが動作しない

QueryBuilder matchQuery = simpleQueryStringQuery(searchTerm); 
    ... 
    HighlightBuilder highlightBuilder = new HighlightBuilder() 
      .postTags("<highlight>") 
      .preTags("</highlight>") 
      .field("description"); 

    SearchResponse response = client.prepareSearch("mediaitems") 
      .setTypes("mediaitem") 
      .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) 
      .setQuery(matchQuery)     // Query 
      .setFrom(from) 
      .setSize(pageSize) 
      .setExplain(true) 
      .highlighter(highlightBuilder) 
      .get(); 

と私のJSON-> POJOコードではなく、返された地図は空です:私はこのように私のSearchResponseとHighlightBuilderを設定します。

Arrays.stream(hits).forEach((SearchHit hit) -> { 
     String source = hit.getSourceAsString(); 
     Map<String, HighlightField> highlightFields = hit.getHighlightFields(); 
     try { 
      MediaItem mediaItem = objectMapper.readValue(source, MediaItem.class); 
      mediaItemList.add(mediaItem); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    }); 

強調表示のリクエストが無視されるのはなぜですか?

ご協力いただきまして誠にありがとうございます。

答えて

0

ハイライトされたフィールドをHighlightBuilderで設定する必要があります。例えば

HighlightBuilder.Field field = new HighlightBuilder.Field(fieldName); 
highlightBuilder.field(field); 

私はあなたが以下を行うことができますので、あなたは、単純なクエリ文字列のクエリを使用していました:

Your query string: fieldname: searched text 

だから、例えばあなたのクエリ文字列は以下の通りです:

price: >2000 && city: Manchaster 

このクエリ文字列では、クエリのフィールドも指定しました。 蛍光灯が機能するようになりました。

+0

QueryBuilderでHighlightBuilderを使用する場所がありません。 https://github.com/elastic/elasticsearch/blob/master/core/src/main/java/org/elasticsearch/index/query/QueryBuilder.java –

+0

はい、あなたは正しい - あなたは私を誤解しました。私のasnwerを編集するつもりです。 – Ansaldos

関連する問題