1. 程式人生 > 實用技巧 >最新Java Elasticsearch 7.10教程(五)-高亮查詢

最新Java Elasticsearch 7.10教程(五)-高亮查詢

一、高亮查詢方案

  • 1、直接基於http傳送請求
  • 2、基於springboot Repositories
  • 3、基於原生Rest Client(HighRestClient)

推建使用方案2

二、具體實現

1、直接基於http傳送請求

參考官方:

Highlighting | Elasticsearch Reference [7.10] | Elastic​www.elastic.co
#格式為GET /index名稱/_search   _search固定 
# contents為欄位名稱,kimchy為輸入的關鍵字
GET /bank/_search
{
  "query": {
    "match": { "contents": "kimchy" }
  },
  "highlight": {
    "fields": {
      "contents": {}
    }
  }
}

2、基於springboot Repositories

引入@Highlight 註解

    @Highlight(fields = {
            @HighlightField(name = "firstname")
    }, parameters = @HighlightParameters(
            preTags = "<strong>",
            postTags = "</strong>"
    ))
    List<SearchHit<Person>> findByFirstname(String firstname);

Test Case

    /**
     * 高亮顯示
     * 使用@Highlight註解
     */
    @Test
    void queryByFirstname() {
        List<SearchHit<Person>> result = personRepository.findByFirstname("hanko");
        result.forEach(res-> {
            Map<String, List<String>> highlightFields = res.getHighlightFields();
            List<String> highlight = highlightFields.get("firstname");
            highlight.forEach(h-> System.out.println(h));
        });
    }

3、基於原生Rest Client(HighRestClient)

    /**
     * 高亮查詢
     * @throws IOException
     */
    @Test
    void highlight() throws IOException {

        SearchRequest searchRequest = new SearchRequest("high-index01");

        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.highlighter(highlightBuilder());
        searchSourceBuilder.query(new MatchQueryBuilder("title", "你好"));

        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = restHighLevelClient
               .search(searchRequest, RequestOptions.DEFAULT);
        printHits(searchResponse);
    }

設定高量屬性

   private HighlightBuilder highlightBuilder() {
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        HighlightBuilder.Field highlightTitle =
                new HighlightBuilder.Field("title");
        highlightBuilder.field(highlightTitle);
        highlightBuilder.preTags("<font size=\"3\" color=\"red\">");
        highlightBuilder.postTags("</font>");
        return highlightBuilder;
    }

原始碼倉庫:

https://gitee.com/hankzhousandyos/springboot-elasticsearch​gitee.com

最新Java Elasticsearch 7.10教程(彙總)

玄明Hanko:最新Java Elasticsearch 7.10教程(彙總)​zhuanlan.zhihu.com