博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot 揭秘与实战(二) 数据存储篇 - ElasticSearch
阅读量:6696 次
发布时间:2019-06-25

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

本文讲解Spring Boot基础下,如何使用 ElasticSearch,实现全文搜索。

原文地址:
博客地址:

版本须知

spring data elasticSearch 的版本与Spring boot、Elasticsearch版本需要匹配。

Spring Boot Version (x) Spring Data Elasticsearch Version (y) Elasticsearch Version (z)
x <= 1.3.5 y <= 1.3.4 z <= 1.7.2
x >= 1.4.x 2.0.0 <=y <5.0.0 2.0.0 <= z < 5.0.0

环境依赖

修改 POM 文件,添加 spring-boot-starter-data-elasticsearch 依赖。

org.springframework.boot
spring-boot-starter-data-elasticsearch
复制代码

数据源

方案一 使用 Spring Boot 默认配置

在 src/main/resources/application.properties 中配置数据源信息。

spring.data.elasticsearch.properties.host = 127.0.0.1spring.data.elasticsearch.properties.port = 9300复制代码

通过 Java Config 创建ElasticSearchConfig。

@Configuration@EnableElasticsearchRepositories("com.lianggzone.springboot.action.data.elasticsearch")public class ElasticSearchConfig {}复制代码

方案二 手动创建

通过 Java Config 创建ElasticSearchConfig。

@Configuration@EnableElasticsearchRepositories("com.lianggzone.springboot.action.data.elasticsearch")public class ElasticsearchConfig2 {    private String hostname = "127.0.0.1";    private int port = 9300;    @Bean    public ElasticsearchOperations elasticsearchTemplate() {        return new ElasticsearchTemplate(client());    }    @Bean    public Client client() {        TransportClient client = new TransportClient();        TransportAddress address = new InetSocketTransportAddress(hostname, port);        client.addTransportAddress(address);        return client;    }}复制代码

业务操作

实体对象

@Document(indexName = "springbootdb", type = "news")public class News {    @Id    private String id;    private String title;    private String content;    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyyMMdd'T'HHmmss.SSS'Z'")    @Field(type = FieldType.Date, format = DateFormat.basic_date_time, index = FieldIndex.not_analyzed)    @CreatedDate    private Date createdDateTime;    // GET和SET方法}复制代码

DAO相关

public interface NewsRepository extends ElasticsearchRepository
{ public List
findByTitle(String title);}复制代码

Service相关

我们来定义实现类,Service层调用Dao层的方法,这个是典型的套路。

@Servicepublic class NewsService {    @Autowired    private NewsRepository newsRepository;    public Iterable
findAll(){ return newsRepository.findAll(); } public Iterable
search(QueryBuilder query){ return newsRepository.search(query); } public List
findByTitle(String title) { return this.newsRepository.findByTitle(title); } public void deleteAll(String id){ this.newsRepository.delete(id); } public void init(){ for (int i = 0; i < 100; i++) { News news = new News(); news.setId(i+""); news.setTitle(i + ".梁桂钊单元测试用例"); news.setContent("梁桂钊单元测试用例"+i+"xxxxx"); news.setCreatedDateTime(new Date()); this.newsRepository.save(news); } }}复制代码

Controller相关

为了展现效果,我们先定义一组简单的 RESTful API 接口进行测试。

@RestController@RequestMapping(value="/data/elasticsearch/news")public class NewsController {    @Autowired    private NewsService newsService;    /**     * 初始化     * @param request     */    @RequestMapping(value = "/init", method = RequestMethod.POST)    public void init(HttpServletRequest request) {        this.newsService.init();    }    /**     * findAll             * @param request     * @return     */    @RequestMapping(value = "/", method = RequestMethod.GET)    public Map
findList(HttpServletRequest request) { Map
params = new HashMap
(); params.put("items", this.newsService.findAll()); return params; } /** * find * @param request * @return */ @RequestMapping(value = "/{title}", method = RequestMethod.GET) public Map
search(@PathVariable String title) { // 构建查询条件 QueryBuilder queryBuilder = QueryBuilders.queryString(title); Map
params = new HashMap
(); params.put("items", this.newsService.search(queryBuilder)); return params; }}复制代码

总结

上面这个简单的案例,让我们看到了 Spring Boot 整合 ElasticSearch 流程如此简单。

源代码

相关示例完整代码:

(完)

更多精彩文章,尽在「服务端思维」微信公众号!

转载地址:http://zlvoo.baihongyu.com/

你可能感兴趣的文章
LeetCode 321. Create Maximum Number
查看>>
如何保证MongoDB的安全性?
查看>>
学习过程中的一些想法
查看>>
PHP 处理金额
查看>>
阿里云 Aliplayer高级功能介绍(九):自动播放体验
查看>>
dubbo源码解析(十)远程通信——Exchange层
查看>>
跨越解决方案之nginx
查看>>
ES6学习笔记
查看>>
SpringMVC工作原理
查看>>
【前端面试】字节跳动2019校招面经 - 前端开发岗(二)
查看>>
前端进阶系列(六):盒模型
查看>>
Android开发 - 掌握ConstraintLayout(一)传统布局的问题
查看>>
使用el-checkbox实现全选,点击失效没有反应
查看>>
webpack4.x 模块化浅析-CommonJS
查看>>
深解微服务架构:从过去,到未来
查看>>
聊聊毕业设计系列 --- 系统实现
查看>>
vue弹窗插件实战
查看>>
vue如何实现单页缓存方案分析
查看>>
WEB/H5性能优化总结
查看>>
js转换字符串为base64位
查看>>