Java弹性搜索:荧光笔不工作

问题描述:

我正在使用Java API for ElasticSearch。我试图强调我的领域,但它不工作。与搜索字词相匹配的正确结果正在返回,因此需要突出显示的内容,但它不会执行此操作。我把我的SearchResponse和HighlightBuilder这样的:Java弹性搜索:荧光笔不工作

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的代码,我检查,看看哪些领域已经凸显,但返回的映射为空。

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

为什么我的突出显示请求被忽略?

任何帮助,非常感谢。

您必须在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