博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot ElasticSearch 简单的全文检索高亮
阅读量:5950 次
发布时间:2019-06-19

本文共 4124 字,大约阅读时间需要 13 分钟。

前阵子和张三丰聊天提到了es。这次正好有机会学习并使用

首先引入依赖

org.springframework.boot
spring-boot-starter-data-elasticsearch

配置文件

spring.data.elasticsearch.local=truespring.data.elasticsearch.repositories.enabled=truespring.data.elasticsearch.cluster-name=yournamespring.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;@Componentpublic 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 AggregatedPage
getIdeaListBySrt(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://vasxx.baihongyu.com/

你可能感兴趣的文章
tortoisesvn的安装
查看>>
URAL 1353 Milliard Vasya's Function DP
查看>>
速读《构建之法:现代软件工程》提问
查看>>
Android onclicklistener中使用外部类变量时为什么需要final修饰【转】
查看>>
django中聚合aggregate和annotate GROUP BY的使用方法
查看>>
TFS简介
查看>>
docker管理平台 shipyard安装
查看>>
Bootstrap3 栅格系统-简介
查看>>
ADODB类库操作查询数据表
查看>>
博客搬家了
查看>>
Python中使用ElementTree解析xml
查看>>
sed处理文本
查看>>
jquery 操作iframe、frameset
查看>>
解决vim中不能使用小键盘
查看>>
jenkins权限管理,实现不同用户组显示对应视图views中不同的jobs
查看>>
我的友情链接
查看>>
CentOS定时同步系统时间
查看>>
批量删除用户--Shell脚本
查看>>
如何辨别android开发包的安全性
查看>>
Eclipse Java @Override 报错
查看>>