热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringBoot整合Elasticserach搜索引擎

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulweb接口。Elasticsearch是用Java语言开


说在前头:本人为大二在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,发布的文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正。若在阅读时有任何的问题,也可通过评论提出,本人将根据自身能力对问题进行一定的解答。



前言

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的
,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便
。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。

而我们在操作Elasticsearch时,需要发送PUT、POST等REST API请求,并在请求体加上json信息来实现具体操作。而SpringBoot为我们整合了Elasticsearch,大大的简化了这些操作,我们只需要调用对应的方法即可完成操作Elasticsearch目的,下面我们来具体来讲述SpringBoot整合Elasticsearch的具体流程,安全带系好,我们要开始粗发了!!!





一、引入依赖

pom.xml(主要导入spring-boot-starter-data-elasticsearch
依赖)

<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<version>2.5.2version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-elasticsearchartifactId>
<version>2.5.2version>
dependency>

二、配置文件

application.yml

spring:
data:
elasticsearch:
cluster-nodes: 127.0.0.1:9200 # Elasticsearch地址
cluster-name: elasticsearch # 默认为elasticsearch
repositories:
enabled: true # 开启本地存储

三、索引对象

Book.java(创建es的索引对象Book

package com.example.estest.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import java.io.Serializable;
@Document(indexName = "book")
public class Book implements Serializable {
@Id
private String id;
@Field
private String name;
public Book(String id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Book{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

四、Dao层对象

BookRepository.java(SpringBoot为我们简化了对Elasticsearch的操作,并封装在了ElasticsearchRepository
对象中,因此我们需要创建一个与新建索引Book对应的Dao层对象来操作es中的Book索引)

package com.example.estest.repository;
import com.example.estest.entity.Book;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface BookRepository extends ElasticsearchRepository<Book, String> {
List<Book> findBooksByName(String name);
}

五、编写测试类

ESTestApplicationTests.java(编写测试类,用于测试BookRepositroy对象对es的增、删、改、查
的操作)

package com.example.estest;
import com.example.estest.entity.Book;
import com.example.estest.repository.BookRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class ESTestApplicationTests {
@Autowired
BookRepository bookRepository;
/*
* 插入操作
*/

@Test
void insertTest() {
Book book = new Book("1", "基督山伯爵");
bookRepository.save(book);
System.out.println("插入操作执行成功!");
findAllTest();
}
/*
* 通过文档id进行删除
*/

@Test
void deleteByIdTest() {
bookRepository.deleteById("1");
System.out.println("删除操作执行成功!");
findAllTest();
}
/*
* 修改操作
*/

@Test
void updateTest() {
Book book = bookRepository.findById("1").get();
book.setName("克里斯汀");
bookRepository.save(book);
System.out.println("修改操作执行成功!");
findByIdTest();
}
/*
* 通过文档id查找
*/

@Test
void findByIdTest() {
System.out.println("搜索结果:" + bookRepository.findById("1"));
}
/*
* 查找该索引下所有文档
*/

@Test
void findAllTest() {
Iterable<Book> iter = bookRepository.findAll();
System.out.println("该索引下所有文档:");
for (Book book : iter) {
System.out.println(book);
}
}
}

测试

1.增

插入操作:首先实例化一个Book索引对象,并调用dao层BookRepository的save()
方法,将新创建的Book对象存入Elasticsearch中(执行测试类中的insertTest()方法执行结果如下图)

2.查

查找操作:如果我们通过文档id查找数据,可以使用findById()
方法(执行测试类中的findByIdTest()方法执行结果如下图)

3.改

修改操作:Elasticsearch中,文档的id是唯一的,如果新插入的数据的文档id已经在es中存在,则es会将新的文档覆盖旧的文档(执行测试类中的updateTest()方法执行结果如下图)

4.删

删除操作:我们只需调用具体方法即可,如按照文档id删除数据,则是deleteById()
方法(测试类中的deleteByIdTest()方法执行结果如下)



推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Python如何调用类里面的方法
    本文介绍了在Python中调用同一个类中的方法需要加上self参数,并且规范写法要求每个函数的第一个参数都为self。同时还介绍了如何调用另一个类中的方法。详细内容请阅读剩余部分。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • Struts2+Sring+Hibernate简单配置
    2019独角兽企业重金招聘Python工程师标准Struts2SpringHibernate搭建全解!Struts2SpringHibernate是J2EE的最 ... [详细]
  • 0x00端口渗透端口扫描端口的指纹信息(版本信息)端口所对应运行的服务常见的默认端口号.尝试弱口令端口爆破hydra端口弱口令NTScanHs ... [详细]
  • 此版本重点升级了Online代码生成器,支持更多的控件生成,所见即所得,极大的提高开发效率;同时做了数据库兼容专项工作,让Online开发兼容更多数据库:Mysql、SqlServer、Oracle、Postgresql等!!!项目介绍 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
author-avatar
黑漆高傲的眼眸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有