前阵子和张三丰聊天提到了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.
高亮写法借鉴代码地址点我
其他方式查询写法地址点我
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72649.html
摘要:搜索请求用于与搜索文档聚合相关的任何操作,还提供了在结果文档上请求高亮的方法。将字段高光色添加到高亮构建器。稍后可以从中检索高亮的文本片段。 Search API 搜索请求 SearchRequest用于与搜索文档、聚合、suggestions相关的任何操作,还提供了在结果文档上请求高亮的方法。 在最基本的表单中,我们可以向请求添加查询: SearchRequest searchReq...
摘要:简介是简称是一个分布式的搜索和分析引擎,可以用于全文检索结构化检索和分析,并能将这三者结合起来。基于开发,现在是使用最广的开源搜索引擎之一。是一个开源的分析与可视化平台,设计出来用于和一起使用的。 ELK简介ELK是Elasticsearch+Logstash+Kibana简称 Elasticsearch 是一个分布式的搜索和分析引擎,可以用于全文检索、结构化检索和分析,并能将这三者结...
阅读 2753·2021-11-22 14:45
阅读 896·2021-10-15 09:41
阅读 1058·2021-09-27 13:35
阅读 3662·2021-09-09 11:56
阅读 2626·2019-08-30 13:03
阅读 3191·2019-08-29 16:32
阅读 3296·2019-08-26 13:49
阅读 766·2019-08-26 10:35