Spring Boot 整合 ElasticSearch 框架

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

ElasticSearch 下载安装,请参考博客:https://blog.csdn.net/yjclsx/article/details/81302041

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

步骤1:引入映射

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

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

spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300
spring.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
//@Repository
public interface ArticleRepository extends ElasticsearchRepository<Article, Long> {

}

这里的 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<Article> 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;

@Service
public class ArticleServiceImpl implements ArticleService {
    @Autowired
    private ArticleRepository articleRepository;

    @Override
    public Article save(Article article) {
        return articleRepository.save(article);
    }

    @Override
    public Iterable<Article>  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<Article> list =  articleService.search(queryBuilder);

        return JsonData.buildSuccess(list);
    }

}

使用 Postman 进行测试

本文参考:https://www.cnblogs.com/cjsblog/p/9756978.html

原文地址:https://www.cnblogs.com/jwen1994/p/11374154.html

时间: 2024-08-02 13:49:07

Spring Boot 整合 ElasticSearch 框架的相关文章

Spring Boot整合Elasticsearch

Spring Boot整合Elasticsearch Elasticsearch是一个全文搜索引擎,专门用于处理大型数据集.根据描述,自然而然使用它来存储和搜索应用程序日志.与Logstash和Kibana一起,它是强大的解决方案Elastic Stack的一部分,我之前的一些文章中已经对此进行了描述. 保留应用程序日志不是Elasticsearch的唯一使用场景.它通常用作应用程序的辅助数据库,是一个主关系数据库.如果您必须对大型数据集执行全文搜索或仅存储应用程序不再修改的许多历史记录,这个方

Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询

运行环境:JDK 7 或 8,Maven 3.0+技术栈:SpringBoot 1.5+,ElasticSearch 2.3.2 本文提纲一.ES 的使用场景二.运行 springboot-elasticsearch 工程三.springboot-elasticsearch 工程代码详解 一.ES 的使用场景 简单说,ElasticSearch(简称 ES)是搜索引擎,是结构化数据的分布式搜索引擎.在<Elasticsearch 和插件 elasticsearch-head 安装详解>  和

Spring boot 整合 Elasticsearch

第一.安装Elasticsearch 请移步 本文Elasticsearch版本:6.4.2 第二.项目操作 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> 实体类   indexName 可以当做数据库名 加上了@

Spring Boot整合Elasticsearch启动报错

如果你遇见下面的错误,很可能是你的springboot和es版本关系不对应 ERROR 14600 --- [ main] .d.e.r.s.AbstractElasticsearchRepository : failed to load elasticsearch nodes : org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [{#

spring boot 整合spring Data JPA+Spring Security+Thymeleaf框架(上)

最近上班太忙所以耽搁了给大家分享实战springboot 框架的使用. 下面是spring boot 整合多个框架的使用. 首先是准备工作要做好. 第一  导入框架所需的包,我们用的事maven 进行对包的管理. 以上的举例是本人的H5DS的真实的后台管理项目,这个项目正在盛情融资中,各位多多捧点人场.关注一下软件发展的动态,说不定以后就是您的生活不可或缺的软件哟. 点击打开链接.闲话少说.现在切入正题. 第二,写点配置文件 第三,spring data -设计一个简单的po关系,这里需要下载一

spring boot 整合 quartz 集群环境 实现 动态定时任务配置【原】

最近做了一个spring boot 整合 quartz  实现 动态定时任务配置,在集群环境下运行的 任务.能够对定时任务,动态的进行增删改查,界面效果图如下: 1. 在项目中引入jar 2. 将需要的表导入数据库 官网上有不同数据库的脚本,找到对应的,导入即可 3. java 代码 将quartz 的相关配置文件,配置为暴露bean,方便后期引用. 有一处关键的地方,就是注入spring 上下文,也可以算是一个坑.如果,不注入spring 上下文,那么新添加的定时任务job,是新new 的一个

Spring boot整合jsp

这几天在集中学习Spring boot+Shiro框架,因为之前view层用jsp比较多,所以想在spring boot中配置jsp,但是spring boot官方不推荐使用jsp,因为jsp相对于一些模板引擎,性能都比较低,官方推荐使用thymeleaf,但是Spring boot整合jsp的过程已经完成,在这里记录一下. 这篇博文是在LZ上篇文章spring boot+mybatis整合基础上写的,开发工具仍然是Intellij idea.这篇文章的重点是Intellij idea的设置,否

Spring Boot整合EhCache

本文讲解Spring Boot与EhCache的整合. 1 EhCache简介 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认CacheProvider.Ehcache是一种广泛使用的开源Java分布式缓存.主要面向通用缓存,Java EE和轻量级容器.它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点. 2 Spring Boot整合EhCache步骤 2.

Spring Boot 整合 JPA 使用多个数据源

介绍# JPA(Java Persistence API)Java 持久化 API,是 Java 持久化的标准规范,Hibernate 是持久化规范的技术实现,而 Spring Data JPA 是在 Hibernate 基础上封装的一款框架.第一次使用 Spring JPA 的时候,感觉这东西简直就是神器,几乎不需要写什么关于数据库访问的代码一个基本的 CURD 的功能就出来了.在这篇文章中,我们将介绍 Spring Boot 整合 JPA 使用多个数据源的方法.开发环境: Spring Bo