前陣子和張三豐聊天提到了es。這次正好有機會學習并使用
首先引入依賴
org.springframework.boot spring-boot-starter-data-elasticsearch
配置文件
spring.data.elasticsearch.local=true spring.data.elasticsearch.repositories.enabled=true spring.data.elasticsearch.cluster-name=yourname spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300
然后 創建接口并繼承ElasticsearchRepository
idea 類繼承 ElasticsearchRepository
package com.school.service; import com.school.model.Idea; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; import org.springframework.stereotype.Component; @Component public interface IdeaRepository extends ElasticsearchRepository{ }
下一步在需要使用的service 或 Controller中 引用
@Autowired private IdeaRepository ideaRepository; //esjap類 @Autowired private ElasticsearchTemplate elasticsearchTemplate; //es工具
使用save方法把數據保存到es中
業務代碼忽略... 保存就完事了
public void save(Long ideaId) { // 插入數據到es中 Idea idea = this.selectById(ideaId); idea.setId(ideaId); ideaRepository.save(idea); }
全文檢索并高亮數據
這里注意分頁的頁數是從0開始... 搞得我以為沒查到數據debug了很久
import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightField; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import org.springframework.data.elasticsearch.core.SearchResultMapper; import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage; import org.springframework.data.elasticsearch.core.aggregation.impl.AggregatedPageImpl; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.data.elasticsearch.core.query.SearchQuery; @Autowired private IdeaRepository ideaRepository; //esjap類 @Autowired private ElasticsearchTemplate elasticsearchTemplate; //es工具 /** * 從es檢索數據 * * @param content 搜索關鍵字 * @param pageNum 頁 * @param pageSzie 條 * @return */ public AggregatedPagegetIdeaListBySrt(String content, Integer pageNum, Integer pageSzie) { Pageable pageable = PageRequest.of(pageNum, pageSzie); String preTag = "";//google的色值 String postTag = ""; SearchQuery searchQuery = new NativeSearchQueryBuilder(). withQuery(matchQuery("ideaTitle", content)). withQuery(matchQuery("ideaContent", content)). withHighlightFields(new HighlightBuilder.Field("ideaTitle").preTags(preTag).postTags(postTag), new HighlightBuilder.Field("ideaContent").preTags(preTag).postTags(postTag)).build(); searchQuery.setPageable(pageable); // 不需要高亮直接return ideas // AggregatedPage ideas = elasticsearchTemplate.queryForPage(searchQuery, Idea.class); // 高亮字段 AggregatedPage ideas = elasticsearchTemplate.queryForPage(searchQuery, Idea.class, new SearchResultMapper() { @Override public AggregatedPage mapResults(SearchResponse response, Class clazz, Pageable pageable) { List chunk = new ArrayList<>(); for (SearchHit searchHit : response.getHits()) { if (response.getHits().getHits().length <= 0) { return null; } Idea idea = new Idea(); //name or memoe HighlightField ideaTitle = searchHit.getHighlightFields().get("ideaTitle"); if (ideaTitle != null) { idea.setIdeaTitle(ideaTitle.fragments()[0].toString()); } HighlightField ideaContent = searchHit.getHighlightFields().get("ideaContent"); if (ideaContent != null) { idea.setIdeaContent(ideaContent.fragments()[0].toString()); } chunk.add(idea); } if (chunk.size() > 0) { return new AggregatedPageImpl<>((List ) chunk); } return null; } }); return ideas; }
其他基礎接口直接使用 ideaRepository.
高亮寫法借鑒代碼地址點我
其他方式查詢寫法地址點我
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72649.html
摘要:搜索請求用于與搜索文檔聚合相關的任何操作,還提供了在結果文檔上請求高亮的方法。將字段高光色添加到高亮構建器。稍后可以從中檢索高亮的文本片段。 Search API 搜索請求 SearchRequest用于與搜索文檔、聚合、suggestions相關的任何操作,還提供了在結果文檔上請求高亮的方法。 在最基本的表單中,我們可以向請求添加查詢: SearchRequest searchReq...
摘要:簡介是簡稱是一個分布式的搜索和分析引擎,可以用于全文檢索結構化檢索和分析,并能將這三者結合起來。基于開發,現在是使用最廣的開源搜索引擎之一。是一個開源的分析與可視化平臺,設計出來用于和一起使用的。 ELK簡介ELK是Elasticsearch+Logstash+Kibana簡稱 Elasticsearch 是一個分布式的搜索和分析引擎,可以用于全文檢索、結構化檢索和分析,并能將這三者結...
閱讀 2757·2021-11-22 14:45
閱讀 903·2021-10-15 09:41
閱讀 1067·2021-09-27 13:35
閱讀 3684·2021-09-09 11:56
閱讀 2632·2019-08-30 13:03
閱讀 3196·2019-08-29 16:32
閱讀 3303·2019-08-26 13:49
閱讀 770·2019-08-26 10:35