博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot 整合 ElasticSearch 框架
阅读量:5089 次
发布时间:2019-06-13

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

在应用中经常会有检索的功能——查询数据库中包含关键字的数据,如果采用查数据库(like 关键字)的方式,效率会非常低。为了解决这个问题,我们引入了 ElasticSearch 框架。

ElasticSearch 下载安装,请参考博客:

接下来,我们使用 Spring Data Elasticsearch Repositories 集成 ElasticSearch 

步骤1:引入映射

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

步骤2:配置文件进行设置

spring.data.elasticsearch.cluster-name=elasticsearchspring.data.elasticsearch.cluster-nodes=127.0.0.1:9300spring.data.elasticsearch.repositories.enabled=true

步骤3::定义一个实体类

package com.example.demo.domain;import java.io.Serializable;import org.springframework.data.elasticsearch.annotations.Document;@Document(indexName = "blog", type = "article")public class Article implements Serializable{    private static final long serialVersionUID = 1L;    private long id;    private String title;    private String summary;    private String content;    private int pv;    //省略getter、setter方法}

这里定义了 Article 实例,表示文章。类比关系型数据库的话,Index 相当于表,Document 相当于记录

在 ElasticSearch 6.X 版本中,不建议使用 type,而且在 7.X 版本中将会彻底废弃 type,但我这里用的是 ElasticSearch 5.6.8,所以仍然写了 type。这里,一个 Article 代表一篇文章,同时代表一条索引记录。

步骤4:定义一个接口,并继承 ElasticSearchRepository

package com.example.demo.repository;import com.example.demo.domain.Article;import org.springframework.data.elasticsearch.annotations.Document;import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;import org.springframework.stereotype.Component;import org.springframework.stereotype.Repository;@Component //@Repositorypublic interface ArticleRepository extends ElasticsearchRepository
{}

这里的 Repository 相当于 DAO,操作 mysql 还是 ElasticSearch 都是一样的

步骤5:定义 service 接口和实现类

package com.example.demo.service;import com.example.demo.domain.Article;import org.elasticsearch.index.query.QueryBuilder;public interface ArticleService {    Article save(Article Article);    Iterable
search(QueryBuilder queryBuilder);}

实现类

package com.example.demo.service.impl;import com.example.demo.domain.Article;import com.example.demo.repository.ArticleRepository;import com.example.demo.service.ArticleService;import org.elasticsearch.index.query.QueryBuilder;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class ArticleServiceImpl implements ArticleService {    @Autowired    private ArticleRepository articleRepository;    @Override    public Article save(Article article) {        return articleRepository.save(article);    }    @Override    public Iterable
search(QueryBuilder queryBuilder) { return articleRepository.search(queryBuilder); }}

步骤6:写一个测试方法

package com.example.demo.controller;import com.example.demo.domain.Article;import com.example.demo.domain.JsonData;import com.example.demo.repository.ArticleRepository;import com.example.demo.service.ArticleService;import org.elasticsearch.index.query.QueryBuilder;import org.elasticsearch.index.query.QueryBuilders;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/api/v1/article")public class ArticleController {    @Autowired    private ArticleService articleService;        @GetMapping("save")    public Object save(long id,String title){            Article article = new Article();        article.setId(id);        article.setPv(123);        article.setContent("搜索elasticsearch框架整合");        article.setTitle(title);        article.setSummary("搜索框架整合");        articleService.save(article);            return JsonData.buildSuccess();    }        @GetMapping("search")    public Object search(String title){        //QueryBuilder queryBuilder = QueryBuilders.matchAllQuery(); //搜索全部文档        QueryBuilder queryBuilder = QueryBuilders.matchQuery("title", title);         Iterable
list = articleService.search(queryBuilder); return JsonData.buildSuccess(list); }}

使用 Postman 进行测试

 

项目结构如下图所示:

 

本文参考:

转载于:https://www.cnblogs.com/jwen1994/p/11374154.html

你可能感兴趣的文章
jquery实现限制textarea输入字数
查看>>
Codeforces 719B Anatoly and Cockroaches
查看>>
jenkins常用插件汇总
查看>>
c# 泛型+反射
查看>>
第九章 前后查找
查看>>
Python学习资料
查看>>
jQuery 自定义函数
查看>>
jquery datagrid 后台获取datatable处理成正确的json字符串
查看>>
ActiveMQ与spring整合
查看>>
web服务器
查看>>
第一阶段冲刺06
查看>>
EOS生产区块:解析插件producer_plugin
查看>>
JS取得绝对路径
查看>>
排球积分程序(三)——模型类的设计
查看>>
HDU 4635 Strongly connected
查看>>
格式化输出数字和时间
查看>>
页面中公用的全选按钮,单选按钮组件的编写
查看>>
java笔记--用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程
查看>>
(旧笔记搬家)struts.xml中单独页面跳转的配置
查看>>
不定期周末福利:数据结构与算法学习书单
查看>>