SpringBoot整合Elasticsearch(最新最全,高效安装到使用)

这篇具有很好参考价值的文章主要介绍了SpringBoot整合Elasticsearch(最新最全,高效安装到使用)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、安装Elasticsearch相关插件

1.选择版本

为了避免使用的Elasticsearch版本和SpringBoot采用的版本不一致导致的问题,尽量使用一致的版本。下表是对应关系:

elasticsearch+springboot,spring boot,elasticsearch,jenkins
我的SpringBoot版本:

<parent>
   <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.15</version>
    <relativePath />
</parent>

所以选择对应Elasticsearch版本为7.12.0。

2.安装Elasticsearch

Elasticsearch各版本下载
Elasticsearch7.12.0官网下载

  1. 下载上面链接的安装包
  2. 解压到任意目录
  3. 启动es /bin/elasticsearch.bat
  4. 查看安装结果,在网页输入localhost:9200,出现下图即为成功

elasticsearch+springboot,spring boot,elasticsearch,jenkins

这时可能会存在一个问题,用localhost可以访问到,用ip访问不到
需要修改Elasticsearch安装目录下的/config/elasticsearch.yml,在58行添加如下设置

network.bind_host: 0.0.0.0

添加完成后,重新启动es服务,可能会出现闪退问题
其中如果问题为:bootstrap check failure [1] of [1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
需要把Elasticsearch安装目录下的/config/elasticsearch.yml中大概77行位置的

#cluster.initial_master_nodes: ["node-1", "node-2"]

注释放开,改为

cluster.initial_master_nodes: ["node-1"]

3.安装node

es5以上就需要安装node和grunt,所以安装head插件的前提,是需要把该两项配置好。

node下载地址下载对应环境的node版本安装即可。

安装过程结束后,在dos窗口查看是否安装成功,使用命令:node -v,出现如下截图,则说明安装成功。

elasticsearch+springboot,spring boot,elasticsearch,jenkins

4.安装grunt

在node安装路径下,使用命令安装:npm install -g grunt-cli 安装grunt。 安装结束后,使用命令grunt
-version查看是否安装成功,出现如下截图,说明安装成功。

elasticsearch+springboot,spring boot,elasticsearch,jenkins

5.安装es-head插件

方便查看ES中的索引及数据

es-head下载地址

解压elasticsearch-head-master
在该目录下进入cmd命令,执行npm install

elasticsearch+springboot,spring boot,elasticsearch,jenkins

执行完成后运行命令 grunt server
grunt server是启动命令
如果出现报错

elasticsearch+springboot,spring boot,elasticsearch,jenkins

则使用 cmd继续执行npm install grunt --save-dev。 这将向package.json添加最新版本。

elasticsearch+springboot,spring boot,elasticsearch,jenkins

如果不报错,则命令窗显示

elasticsearch+springboot,spring boot,elasticsearch,jenkins

浏览器输入127.0.0.1:9100

elasticsearch+springboot,spring boot,elasticsearch,jenkins

这里其实无法连接到elasticsearch, 还需要解决跨域问题
由于前后端分离开发,所以会存在跨域问题,需要在服务端做CORS的配置。
修改Elasticsearch安装目录下的/config/elasticsearch.yml,添加如下设置

http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-credentials: true
http.cors.allow-headers: Content-Type,Accept,Authorization,x-requested-with
#http.cors.allow-headers: "*"

重启ES服务

elasticsearch+springboot,spring boot,elasticsearch,jenkins

6.安装kibana

用途:便于通过rest api调试ES。

kibana官方7.12.0下载地址
kibana中文社区下载地址

  1. 解压
  2. 修改 kibana-7.12.0-windows-x86_64/config/kibana.yml 32行
  3. 改为elasticsearch.hosts: [“http://127.0.0.1:9200”]
  4. 保存之后,运行bin/kibana.bat
  5. 浏览器中访问kibana首页首页链接

elasticsearch+springboot,spring boot,elasticsearch,jenkins

直接访问开发工具:开发工具

elasticsearch+springboot,spring boot,elasticsearch,jenkins

如果想使用ip访问kibana,需要修改 kibana-7.12.0-windows-x86_64/config/kibana.yml 7行
改为 server.host: “0.0.0.0”
如果想使用kibana汉化 需要修改 kibana-7.12.0-windows-x86_64/config/kibana.yml 最后一行
i18n.locale: “zh-CN”

7.安装ik分词器

注意:下载的ik分词器版本号要和安装的elasticsearch版本一致

把下载的ik分词器解压至Elasticsearch的安装目录/plugins/ik内。

elasticsearch+springboot,spring boot,elasticsearch,jenkins文章来源地址https://www.toymoban.com/news/detail-722064.html

  1. 测试ik分词器
  2. 重启elasticsearch
  3. 重启kibana
  4. 进入kibana的开发工具中执行命令测试 开发工具
  5. 执行命令: GET _analyze{ “analyzer”: “ik_max_word”, “text”: “折上折满减”}
  6. 执行结果如下
    elasticsearch+springboot,spring boot,elasticsearch,jenkins

二、整合SpringBoot和Elasticearch

1.pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.15</version>
    <relativePath />
</parent>
<!--springBoot2.5.15对应Elasticsearch7.12.0版本-->
<!--elasticsearch-->
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>7.12.0</version>
</dependency>

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

2.application.yml

spring:
	elasticsearch:
       rest:
            uris: 192.168.1.36:9200
            connection-timeout: 1s
            read-timeout: 30s

3.ElasticSearch(实体类)

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

//@Document 文档对象 (索引信息、文档类型 )
@Document(indexName="blog3")
@Data
public class ElasticSearch {

    //@Id 文档主键 唯一标识
    @Id
    //@Field 每个文档的字段配置(类型、是否分词、是否存储、分词器 )
    @Field(store=true, index = false,type = FieldType.Integer)
    private Integer id;

    @Field(index=true,analyzer="ik_smart",store=true,searchAnalyzer="ik_smart",type = FieldType.Text)
    private String title;

    @Field(index=true,analyzer="ik_smart",store=true,searchAnalyzer="ik_smart",type = FieldType.Text)
    private String content;

    @Field(index=true,store=true,type = FieldType.Double)
    private Double price;
}

4.ElasticSearchRepository

import com.economics.project.es.domain.ElasticSearch;
import org.springframework.data.elasticsearch.annotations.Highlight;
import org.springframework.data.elasticsearch.annotations.HighlightField;
import org.springframework.data.elasticsearch.annotations.HighlightParameters;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository
public interface ElasticSearchRepository extends ElasticsearchRepository<ElasticSearch, Integer> {

    /**
     * 查询内容标题查询
     * @param title 标题
     * @param content 内容
     * @return 返回关键字高亮的结果集
     */
    @Highlight(
            fields = {@HighlightField(name = "title"), @HighlightField(name = "content")},
            parameters = @HighlightParameters(preTags = {"<span style='color:red'>"}, postTags = {"</span>"}, numberOfFragments = 0)
    )
    List<SearchHit<ElasticSearch>> findByTitleOrContent(String title, String content);

}

5.ElasticSearchService

import com.economics.project.es.domain.ElasticSearch;
import org.springframework.data.elasticsearch.core.SearchHit;
import java.util.List;

public interface ElasticSearchService {

    //保存和修改
    void save(ElasticSearch article);
    //查询id
    ElasticSearch findById(Integer id);
    //删除指定ID数据
    void   deleteById(Integer id);

    long count();
    
    boolean existsById(Integer id);

    List<SearchHit<ElasticSearch>> findByTitleOrContent(String title, String content);

}

6.ElasticSearchServiceImpl

import com.economics.project.es.domain.ElasticSearch;
import com.economics.project.es.service.ElasticSearchService;
import com.economics.project.es.service.ElasticSearchRepository;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;

@Service
public class ElasticSearchServiceImpl implements ElasticSearchService {

    @Resource
    private ElasticSearchRepository ElasticSearchRepository;


    @Override
    public void save(ElasticSearch ElasticSearch) {
        ElasticSearchRepository.save(ElasticSearch);
    }

    @Override
    public ElasticSearch findById(Integer id) {
        return ElasticSearchRepository.findById(id).orElse(new ElasticSearch());
    }

    @Override
    public void deleteById(Integer id) {
        ElasticSearchRepository.deleteById(id);
    }

    @Override
    public long count() {
        return ElasticSearchRepository.count();
    }

    @Override
    public boolean existsById(Integer id) {
        return ElasticSearchRepository.existsById(id);
    }

    @Override
    public List<SearchHit<ElasticSearch>> findByTitleOrContent(String title, String content) {
        return ElasticSearchRepository.findByTitleOrContent(title,content);
    }

}

7.EsTest

import com.economics.EconomicsApplication;
import com.economics.project.es.domain.ElasticSearch;
import com.economics.project.es.service.ElasticSearchService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = EconomicsApplication.class)
public class EsTest {

    @Resource
    private ElasticSearchService elasticSearchService;

    @Resource
    private ElasticsearchRestTemplate elasticsearchRestTemplate;
    /**创建索引和映射*/
    @Test
    public void createIndex(){

//        elasticsearchTemplate.createIndex(ElasticSearch.class);
//        elasticsearchTemplate.putMapping(ElasticSearch.class);
    }

    /**添加文档或者修改文档(以id为准)*/
    @Test
    public void saveElasticSearch(){
        ElasticSearch elasticSearch = new ElasticSearch();
        elasticSearch.setId(1);
        elasticSearch.setTitle("SpringData ElasticSearch");
        elasticSearch.setContent("Spring Data ElasticSearch 基于 spring data API 简化 elasticSearch操作,将原始操作elasticSearch的客户端API 进行封装 \n" +
                "    Spring Data为Elasticsearch Elasticsearch项目提供集成搜索引擎");
        elasticSearchService.save(elasticSearch);
    }
    @Test
    public void findById(){
        ElasticSearch byId = elasticSearchService.findById(1);
        System.out.println(byId);
    }
    @Test
    public void deleteById(){
        elasticSearchService.deleteById(100);

    }
    @Test
    public void count(){
        long count = elasticSearchService.count();
        System.out.println(count);
    }
    @Test
    public void existsById(){
        boolean b = elasticSearchService.existsById(102);

        System.out.println(b);
    }
    @Test
    public void findByTitleOrContent(){
        List<SearchHit<ElasticSearch>> byTitleOrContent = elasticSearchService.findByTitleOrContent("xxxxxxSpringData","elasticSearch");
        for (SearchHit<ElasticSearch> elasticSearchService : byTitleOrContent) {
            List<String> title = elasticSearchService.getHighlightField("title");
            System.out.println(title);
            List<String> content = elasticSearchService.getHighlightField("content");
            System.out.println(content);

        }
    }
}

8.自定义查询方式

关键字 解释 方法
and 根据Field1和Field2获得数据 findByTitleAndContent(String title,String content);
or 根据Field1或Field2获得数据 findByTitleOrContent(String title,String content);
is 根据Field获得数据 findByTitle(String title);
not 根据Field获得相反数据 findByTitleNot(String title)
between 获得指定范围的数据 findByPriceBetween(double price1, double price2);
lessThanEqual 获得小于等于指定值的数据 findByPriceLessThan(double price);
GreaterThanEqual 获得大于等于指定值的数据 findByPriceGreaterThan(double price);
Before findByPriceBefore
After findByPriceAfter
Like 比较相识的数据 findByNameLike
StartingWith 以xx开头的 数据 findByNameStartingWith(String Name);
EndingWith 以xx结尾的 数据 findByNameEndingWith(String Name);
Contains/Containing 包含的 数据 findByNameContaining(String Name);
In 多 值匹配 findByNameIn(Collectionnames)
NotIn 多 值 不匹配 findByNameNotIn(Collectionnames)
OrderBy 排序 后的数据 findByxxxxxOrderByNameDesc(String xxx );

到了这里,关于SpringBoot整合Elasticsearch(最新最全,高效安装到使用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【unity插件】 DoTween动画插件的安装和使用整合(最全)

    DOTween是最常用的动画插件之一,比使用Unity自带脚本写动画,方便很多。 untiy商店插件地址 https://assetstore.unity.com/packages/tools/animation/dotween-hotween-v2-27676 DOTween商城地址,开发文档 http://dotween.demigiant.com DOTween首次使用需要设置,导入以后会弹出下面的窗口,点击按钮就好。 之

    2024年02月16日
    浏览(37)
  • springboot整合elasticsearch使用案例

    完成搜索和分页 添加品牌、城市、星级、价格等过滤功能 搜索我附近的酒店    让指定的酒店在搜索结果中排名置顶 添加isAD字段

    2024年02月09日
    浏览(28)
  • Springboot 整合 Elasticsearch(五):使用RestHighLevelClient操作ES ②

    📁 前情提要: Springboot 整合 Elasticsearch(三):使用RestHighLevelClient操作ES ① 目录  一、Springboot 整合 Elasticsearch 1、RestHighLevelClient API介绍 1.1、全查询 分页 排序 1.2、单条件查询 1.2.1、termQuery 1.2.2、matchQuery 1.2.3、短语检索 1.3、组合查询 1.4、范围查询 1.5、模糊查询 1.6、分组

    2024年04月11日
    浏览(34)
  • SpringBoot3.0 整合 ElasticSearch8.5.0 及使用

    这两个版本都是目前较新的版本,本文选用的依赖是 spring-boot-starter-data-elasticsearch:3.0 ,这个新版本也是改用了es的 elasticsearch-java API,全面推荐使用Lambda语法;另外SpringData本身推出了 Repository 功能(有些类似Mybatis-Plus)的功能,也支持注解简化开发。 Docker 快速部署 单机 ela

    2024年02月11日
    浏览(53)
  • 基于 SpringBoot 2.7.x 使用最新的 Elasticsearch Java API Client 之 ElasticsearchClient

    从 Java Rest Client 7.15.0 版本开始,Elasticsearch 官方决定将 RestHighLevelClient 标记为废弃的,并推荐使用新的 Java API Client,即 ElasticsearchClient. 为什么要将 RestHighLevelClient 废弃,大概有以下几点: 维护成本高 :RestHighLevelClient 需要和 Elasticsearch APIs 的更新保持一致,而 Elasticsearch A

    2024年02月08日
    浏览(40)
  • SpringBoot整合RabbitMQ(最新笔记)

    1.2 创建工程并导入依赖 我们使用的springboot版本为2.5.6,其他都是根据 spring-boot-starter-parent 自动选择版本 引入以下工程即可 spring-boot-starter-test 用于测试 junit 用于单元测试 spring-boot-starter-amqp SpringBoot和RabbitMQ的整合方案 1.2 创建配置文件并配置 SpringBoot配置文件名称为 applica

    2024年02月05日
    浏览(37)
  • Springboot整合kafka实现高效的消息传递和处理

    Kafka是一个分布式的流处理平台,它可以处理高吞吐量的消息。Spring Boot是一个流行的Java开发框架,提供了快速构建应用程序的能力。将这两者结合起来可以实现高效的消息传递和处理,同时支持多种消息模式。 本篇博客将介绍如何使用Spring Boot整合Kafka,并支持多种消息模式

    2024年02月09日
    浏览(27)
  • linux安装minio以及springboot整合使用

    1.新建文件夹 2.进入文件夹 3.下载minio,链接可从官网获取 下载下来后会在当前所在文件夹看到minio文件 4.赋予权限 要给下载下来的minio赋予权限,不然后面无法启动 赋予权限之后如图 5.开放端口 因为我后面会指定minio使用9090和9000端口,所以先开放这两个端口,如果你指定的

    2024年02月10日
    浏览(30)
  • 史上最全从0到1搭建最新版本jenkins可持续集成,整合git和maven部署微服务自动构建发版,抓紧收藏起来吧!

    好文推荐: netty搭建websocket集群(高性能.,高并发) springboot 实现延时队列(超级实用) 2.5万字讲解DDD领域驱动设计(史上最全DDD) 传统的软件开发在系统上线的时候需要手动进行,这个过程可能相对繁琐和容易出错,发布过程如下: 代码构建:开发人员在本地环境中编写

    2024年04月13日
    浏览(33)
  • Docker安装InfluxDB(1.8)以及SpringBoot整合使用

    一、Docker安装使用influxdb(1.8) 1、拉取镜像() 2、初始化容器 查看容器运行状态 3、进入influxdb容器修改配置 查找配置文件并修改 修改配置内容 完整配置文件内容 4、增加用户 重启容器验证用户名密码是否设置成功 使用相关 5、influxdb使用 保留策略相关 查看mydb数据库保留策

    2024年02月12日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包