1. 程式人生 > 其它 >SpringBoot整合ES7.6實現高亮

SpringBoot整合ES7.6實現高亮

技術標籤:Spring

最近跟牛客寫java,整個ES時發現找不到SearchResultMapper,後在網上找到解決方法,記錄下來。

文章目錄

大佬的大腿

修改配置

在這裡插入圖片描述

在配置類那個包下中增加EsConfig這個類

package cn.edu.njtech.community.config;

import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.
springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.elasticsearch.client.ClientConfiguration; import org.springframework.data.elasticsearch.client.RestClients; @Configuration public class EsConfig{ //localhost:9200 寫在配置檔案中就可以了
@Value("${elasticSearch.url}") private String esUrl; @Bean RestHighLevelClient client() { ClientConfiguration clientConfiguration = ClientConfiguration.builder() .connectedTo(esUrl)//elasticsearch地址 .build(); return RestClients.
create(clientConfiguration).rest(); } }
測試程式碼
@Test
    public void testSearchByTemplate(){
        NativeSearchQuery query = new NativeSearchQueryBuilder().
                withQuery(QueryBuilders.multiMatchQuery("網際網路寒冬","title","content"))
                .withSort(SortBuilders.fieldSort("type").order(SortOrder.DESC))
                .withSort(SortBuilders.fieldSort("score").order(SortOrder.DESC))
                .withSort(SortBuilders.fieldSort("createTime").order(SortOrder.DESC))
                .withPageable(PageRequest.of(0,10))
                .withHighlightFields(
                        new HighlightBuilder.Field("title").preTags("<em>").postTags("</em>"),
                        new HighlightBuilder.Field("content").preTags("<em>").postTags("</em>")
                ).build();
        SearchHits<DiscussPost> search = elasticsearchRestTemplate.search(query,DiscussPost.class);
        // 得到查詢結構返回的內容
        List<SearchHit<DiscussPost>> searchHits = search.getSearchHits();
        // 設定一個需要返回的實體類集合
        List<DiscussPost> discussPosts = new ArrayList<>();
        for(SearchHit<DiscussPost> searchHit:searchHits){
            Map<String,List<String>> highLightFields = searchHit.getHighlightFields();

            // 將高亮內容填充到content中
            searchHit.getContent().setTitle(highLightFields.get("title") == null ? searchHit.getContent().getTitle() : highLightFields.get("title").get(0));
            searchHit.getContent().setContent(highLightFields.get("content") == null ? searchHit.getContent().getContent() : highLightFields.get("content").get(0));

            // 放到實體類中
            discussPosts.add(searchHit.getContent());
        }
        System.out.println(discussPosts.size());
        for(DiscussPost discussPost:discussPosts){
            System.out.println(discussPost);
        }
    }