Elasticsearch 搜索测试与集成Springboot3

这篇具有很好参考价值的文章主要介绍了Elasticsearch 搜索测试与集成Springboot3。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Elasticsearch是专门做搜索的,它非常擅长以下方面的问题

  • Elasticsearch对模糊搜索非常擅长(搜索速度很快)
  • 从Elasticsearch搜索到的数据可以根据评分过滤掉大部分的,只要返回评分高的给用户就好了(原生就支持排序)
  • 没有那么准确的关键字也能搜出相关的结果(能匹配有相关性的记录)

它能够一定程度上解决,在一个普通数据库处理上亿条数据时的查询效率低下的同时无法优秀地排列好用户所需要的数据,一次性上亿条数据没有经过正确地排列,用户很难找到想要的数据。并且,用户输入的数据可能不太准确,它也能够进行模糊查询,这种模糊查询是依靠计算得来的,而不是简单地匹配数据。本系列博文将从零开始一步步实现将 ES 集成到 springboot3 中,并在一个社区项目中进行实际应用测试,本文为系列第一篇,后续,博文仍在整理,请持续关注博主,了解更多相关知识。


本文将在以下环境进行测试:
  • window11
  • SpringBoot:3.0.2
  • Elasticsearch:8.5.0
  • elasticsearch-analysis-ik:8.5.0
  • Kibana:8.5.0

搭建 Elasticsearch 服务器以及分词扩展

先从 Elasticsearch 官网下载:Elasticsearch 8.5.0 | Elastic 该版本,再去 Github 下载分词器扩展:Release v8.5.0 · medcl/elasticsearch-analysis-ik (github.com) 下载完成之后,分别进行解压缩,注意后者(ik)必须解压缩在前者(Elasticsearch)解压后的 plugins 中的 ik 目录下,如下:

springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

进入 config 目录下,我们可以看到几个配置文件:

  • extra_main.dic:中文分词词典,词语,例如:皇帝
  • extra_stopword.dic:中文停止词词典,结束词:也、了
  • IKAnalyzer.cfg.xml:配置额外词典文件

如果需要自定义词典,在 config 目录下自定义一个英文名称的以 dic 结尾的文件,里面填入自定义词,一行一个,之后从 IKAnalyzer.cfg.xml 配置自定义词典即可生效。配置方法就是在指定位置填入对应词库名称加后缀,远程需要添加 url,并以 dic 结尾,获取到的也必须是一行一个分词。该 url 也需要返回两个头部(header),一个是Last-Modified,一个是ETag,这两者都是字符串类型,只要有一个发生变化,该插件就会去抓取新的分词进而更新词库。远程更新不需要重启服务器,本地词库文件更新需要重启服务器。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
	<comment>IK Analyzer 扩展配置</comment>
	<!--用户可以在这里配置自己的扩展字典 -->
	<entry key="ext_dict"></entry>
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords"></entry>
	<!--用户可以在这里配置远程扩展字典 -->
	<!-- <entry key="remote_ext_dict">words_location</entry> -->
	<!--用户可以在这里配置远程扩展停止词字典-->
	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

完成这些之后,我们就来配置一下 Elasticsearch 的环境变量以及本地服务器名称、数据、日志的保存路径。在系统变量处添加你解压缩的 Elasticsearch 对应的 bin 目录。在 elasticsearch-8.5.0 下找到 config 中的 elasticsearch.yml 文件,这就是配置文件,需要更改的就以下三个位置:17行、33行、37行,注意把这三行前面的 “#” 去掉。

cluster.name: yumuing
path.data: C:\tool\elasticsearch-8.5.0\data
path.logs: C:\tool\elasticsearch-8.5.0\data\logs

配置完这些之后,就可以在其 bin 目录下,找到 elasticsearch.bat 文件,双击启动即可,等待出现如下即为启动成功,第一次启动较慢,耐心等待:

注意不要使用管理员权限启动,会启动卡住,一直不动。

springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

如果还是卡住不动,可以尝试在 config 目录下找到 elasticsearch.yml 增加以下代码,关闭geoip数据库的更新。

ingest.geoip.downloader.enabled: false

如果,自身内存少于 16 g ,建议将 config 目录下的 jvm.options 申请内容配置修改为如下,注意删除最前面的 “##”,将初始内存改为 256m,最大内存修改为 512m。

-Xms512m
-Xmx1g

使用第一次运行 Elasticsearch 时 会自动进行安全配置,会在控制台输出账号密码,如下:

->  Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
  RGiwCn4abvxC4CYHNqvU

默认账号为:elastic

如果你忘记了账户密码,可以到你上面设置的 logs 目录寻找关键词:password,如果实在找不到的话,可以在 bin 目录下调取 cmd 命令行,输入:elasticsearch-reset-password -u elastic ,稍等一会就会输出密码。如果还不能输出密码,可以尝试在 elasticsearch.yml 输入以下代码

discovery.type: single-node

设置为单节点应用,在尝试输入:elasticsearch-reset-password -u elastic 修改密码。

默认端口号为 9200 ,打开 cmd 命令窗口,输入

curl -u <用户名>:<密码> -X GET "localhost:9200/_cat/health" 

检查服务状态,为 green 即可开始尝试使用了。返回的 json 如下:

{
    "cluster_name":"yumuing",
    "status":"green",
    "timed_out":false,
    "number_of_nodes":1,
    "number_of_data_nodes":1,
    "active_primary_shards":1,
    "active_shards":1,
    "relocating_shards":0,
    "initializing_shards":0,
    "unassigned_shards":0,
    "delayed_unassigned_shards":0,
    "number_of_pending_tasks":0,
    "number_of_in_flight_fetch":0,
    "task_max_waiting_in_queue_millis":0,
    "active_shards_percent_as_number":100
}

当然,在控制台中没有进行格式美化,是一长串,注意一下。

如果不想要安全认证的话,可以添加以下代码到 elasticsearch.yml 中

xpack.security.enabled: false

输入:

curl -X GET "localhost:9200/_cat/health" 

即可得到健康状态。

常见 http 命令

索引在 MySql 中代表数据库,文档代表一行数据,字段代表一列数据。

添加索引:put 请求

localhost:9200/test

查询索引:get 请求

localhost:9200/_cat/indices

删除索引:delete 请求

localhost:9200/test

插入文档:put 请求,也可作为更新数据,如有相同值文档,会先删除再增加,变相地更新

localhost:9200/test/_doc/{id}

并提交对应的 json 数据,如下:

springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

获得回复:本次请求中 id 值设为 1,类型在版本8.5.0已被舍弃,故没有 _type 字段。但 _doc 还是得保留在请求中。“result”: “created”,

{
    "_index": "test",
    "_id": "1",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 0,
    "_primary_term": 1
}

更新文档的回复:“result”: “updated”,

{
    "_index": "test",
    "_id": "1",
    "_version": 2,
    "result": "updated",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 3,
    "_primary_term": 1
}

查询文档:get请求, _source 即为文档数据

localhost:9200/test/_doc/{id}
{
    "_index": "test",
    "_id": "1",
    "_version": 1,
    "_seq_no": 0,
    "_primary_term": 1,
    "found": true,
    "_source": {
        "name": "yumuing",
        "content": "hello"
    }
}

或者查询不到数据: “found”: false

{
    "_index": "test",
    "_id": "1",
    "found": false
}

删除文档:delete 请求

localhost:9200/test/_doc/{id}

返回数据:“result”: “deleted”

{
    "_index": "test",
    "_id": "1",
    "_version": 2,
    "result": "deleted",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 1,
    "_primary_term": 1
}

搜索所有数据:get请求 “hits”: 为所有数据, “value”: 3:搜索到多少条数据

localhost:9200/{索引}/_search

回复:

{
    "took": 809,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 3,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [
            {
                "_index": "test",
                "_id": "1",
                "_score": 1.0,
                "_source": {
                    "title": "test",
                    "content": "测试一下"
                }
            },
            {
                "_index": "test",
                "_id": "3",
                "_score": 1.0,
                "_source": {
                    "title": "test",
                    "content": "测试2"
                }
            },
            {
                "_index": "test",
                "_id": "2",
                "_score": 1.0,
                "_source": {
                    "title": "test",
                    "content": "测试3"
                }
            }
        ]
    }
}

搜索单一特定内容:get 请求,内容无需双引号,搜索时,会自动提取内容中的词组再分别搜索包含对应词组的文档,多少个词组就有多少个搜索条件。就像运营实习,会被分为三个词组去搜索,一个是运营实习,一个是运营,一个是实习。

localhost:9200/{索引}/_search?q=字段名:内容

返回数据与搜索全部数据类似,就不展示了。

搜索多个字段内容:get 请求,携带 json

“query”:“搜索关键词”
“fields”:[“字段1”,“字段2”]

{
    "query":{
        "multi_match":{
            "query":"2",
            "fields":["title","content"]
        }
    }
}

返回数据与其他搜索数据类似不展示。

当然,es 的搜索语法并不只有这些,还有很多,建议查看官方文档,本文仅对 es 做简单介绍,下文将介绍如何集成进 springboot中,并进行实际应用。

springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

图形化界面

一、Kibana是什么

Kibana 是为 Elasticsearch设计的开源分析和可视化平台。你可以使用 Kibana 来搜索,查看存储在 Elasticsearch 索引中的数据并与之交互。你可以很容易实现高级的数据分析和可视化,以图表的形式展现出来。
使用前我们肯定需要先有Elasticsearch啦,安装使用Elasticsearch可以参考Elasticsearch构建全文搜索系统

下面分别演示一下Kibana的安装、自定义索引,搜索,控制台调用es的api和可视化等操作,特别需要注意的是,控制台可以非常方便的来调用es的api,强烈推荐使用

二、如何安装

直接下载对应平台的版本就可以,参考地址Installing Kibana
这里我直接下载了 windows 平台的 Kibana 8.5.0 | Elastic

配置可以参考Configring Kibana
设置监听端口号、es地址、索引名
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

默认情况下,kibana启动时将生成随机密钥,这可能导致重新启动后失败,需要配置多个实例中有相同的密钥
设置

xpack.reporting.encryptionKey: "chenqionghe"
xpack.security.encryptionKey: "122333444455555666666777777788888888"
xpack.encryptedSavedObjects.encryptionKey: "122333444455555666666777777788888888"

启动

./bin/kibana

打开http://localhost:5601,画风如下
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

提示我们可以使用示例数据,也可以使用自己已有的数据,我把示例数据都下载了,单击侧面导航中的 Discover 进入 Kibana 的数据探索功能:
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

可以看到数据已经导入了,我们可以直接使用查询栏编写语句查询
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

三、如何加载自定义索引

接下来演示加载已经创建book索引
单击 Management 选项
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

然后单击 Index Patterns 选项。
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

点击Create index pattern定义一个新的索引模式。
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

点击Next step
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

点击Create index pattern
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

出来如下界面,列出了所有index中的字段
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

接下来,我们再来使用一下kibana查看已经导入的索引数据
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

可以看到,已经能展示和检索出我们之前导入的数据,奥利给!

四、如何搜索数据

springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

可以看到,我们能很方便地搜索栏使用Llucene查询,查询语法可以参考Lucene查询语法汇总

五、如何切换中文

config/kibana.yml添加

i18n.locale: "zh-CN"

重新启动,即可生效
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

六、如何使用控制台

控制台插件提供一个用户界面来和 Elasticsearch 的 REST API 交互。控制台有两个主要部分: editor ,用来编写提交给 Elasticsearch 的请求; response 面板,用来展示请求结果的响应。在页面顶部的文本框中输入 Elasticsearch 服务器的地址。默认地址是:“localhost:9200”。
点击左侧栏的[Dev Tools],可以看到如下界面,可以很方便地执行命令
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

示例操作

# 查看所有节点
GET _cat/nodes

# 查看book索引数据
GET book/_search
{
    "query": {
    "match": {
      "content": "chenqionghe"
    }
  }
}

# 添加一条数据
POST book/_doc 
{
  "page":8,
  "content": "chenqionghe喜欢运动,绳命是如此的精彩,绳命是多么的辉煌"
}

# 更新数据
PUT book/_doc/iSAz4XABrERdg9Ao0QZI
{
  "page":8,
  "content":"chenqionghe喜欢运动,绳命是剁么的回晃;绳命是入刺的井猜"
}

# 删除数据
POST book/_delete_by_query
{
  "query": {
    "match": {
      "page": 8
    }
  }
}

# 批量插入数据
POST book/_bulk
{ "index":{} }
{ "page":22 , "content": "Adversity, steeling will strengthen body.逆境磨练意志,锻炼增强体魄。"}
{ "index":{} }
{ "page":23 , "content": "Reading is to the mind, such as exercise is to the body.读书之于头脑,好比运动之于身体。"}
{ "index":{} }
{ "page":24 , "content": "Years make you old, anti-aging.岁月催人老,运动抗衰老。"}
{ "index":{} }

springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

七、如何使用可视化

Kibana可视化控件基于 Elasticsearch 的查询。利用一系列的 Elasticsearch 查询聚合功能来提取和处理数据,再通过创建图表来呈现数据分布和趋势

点击Visualize菜单,进入可视化图表创建界面,Kibana自带有上10种图表,我们来创建一个自己的图表
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

我们来添加一个直方图
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

可以看到,默认已经有一个Y轴了,统计的是数量,我们添加一个X轴,点击Buckets下的Add
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

如下,我选择了customer_id字段作为x轴
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

执行后如下
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

保存一下
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

八、如何使用仪表盘

Kibana 仪表板(Dashboard) 展示保存的可视化结果集合。
就是可以把上面定义好的图表展示
创建一个Dashboard
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

添加已经存在的图表
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

添加完后保存即可,我们可以定制出非常丰富的面板,如下
springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot

Kibana的使用就是这么简单,是不是觉得超简单,建议自己去安装使用一下,加深印象。

springboot3 elasticsearch,后端开发,elasticsearch,搜索引擎,springboot文章来源地址https://www.toymoban.com/news/detail-814898.html

到了这里,关于Elasticsearch 搜索测试与集成Springboot3的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • SpringBoot集成Solr(二)搜索数据

    1.1 构建查询条件 上面代码中左边的字符串是映射到solr中的实体属性,相当于数据库中的表字段, * 表示匹配多位。 1.2 构建排序条件 1.3 设置分页 注意: solr的分页第一页其实是从0开始的,部分框架中分页插件第一页是从1开始的 。 1.4 设置高亮 注意: 这种方式设置的高亮

    2024年02月12日
    浏览(32)
  • 【SpringBoot】SpringBoot集成ElasticSearch

    这段代码是一个基本的 Elasticsearch Java 客户端的配置类,用于创建一个 RestHighLevelClient 实例。 其中 RestHighLevelClient 是 Elasticsearch Java 客户端的高级别别名,是基于 LowLevelClient 之上的封装,提供了一些更加方便的方法和功能。 在这段代码中,使用了 @Value 注解来注入三个配置项

    2024年02月04日
    浏览(35)
  • Elasticsearch 集成---框架集成SpringData-集成测试-索引操作

    1.Spring Data 框架介绍 Spring Data 是一个用于简化数据库、非关系型数据库、索引库访问,并支持云服务的 开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持 map-reduce 框架和云计 算数据服务。 Spring Data 可以极大的简化 JPA ( Elasticsearch „)的写法,可以在几乎不

    2024年02月11日
    浏览(24)
  • SpringBoot 集成 Elasticsearch

    版本说明详见 Elasticsearch 下载 kibana下载 ik分词器下载 2.1 解压,在elasticsearch-7.8.0plugins 路径下新建ik目录 2.2 将ik分词器解压放入ik目录 2.3 扩展词汇测试示例 2.3.1 ik/config 目录下新建custom.dic文件 2.3.2 编辑custom.dic文件,加入新词汇 注意:custom.dic文件内容的格式的编码为UTF-8格

    2024年02月14日
    浏览(27)
  • SpringBoot集成ElasticSearch

    实现搜索并高亮 在线体验:http://www.sixkey-world.top

    2024年03月17日
    浏览(36)
  • SpringBoot集成 ElasticSearch

    对于ElasticSearch比较陌生的小伙伴可以先看看ElasticSearch的概述ElasticSearch安装、启动、操作及概念简介 好的开始啦~ 1.1、导入依赖 新版本配置方式(推荐使用) 新的配置方式使用的是 High Level REST Client 的方式来替代之前的 Transport Client 方式,使用的是 HTTP 请求,和 Kibana 一样使

    2023年04月20日
    浏览(25)
  • ElasticSearch集成SpringBoot实践

    Search API Search Request,用于搜索文档,聚合,相关的任何操作,还提供了高亮显示结果文档的方法 使用SearchSourceBuilder,大多数控制搜索行为的选项都可以在SearchSourceBuilder上设置 构建查询,搜索查询是使用QueryBuilder对象创建的,ES的查询DSL支持的每一种搜索查询类型都有一个

    2024年02月03日
    浏览(28)
  • 六、SpringBoot集成elasticsearch

    目录 官网API介绍 1、新建maven项目 2、检查elasticsearch依赖的版本 3、配置RestHighLevelClient对象 4、使用springboot-test测试API的使用 Java API Client https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/index.html Java REST Client(rest-high-level-client): https://www.elastic.co/guide/en/elasticsearc

    2024年02月09日
    浏览(55)
  • SpringBoot Elasticsearch全文搜索

    全文搜索(检索),工作原理:计算机索引程序,扫描文章中的每一个词,对每一个词建立一个索引,指明出现次数和位置。查询时通过索引进行查找,类似于查字典。 因为是通过索引在查,速度较于通过sql查,会快很多。 具体过程如下: 1、建文本库 2、建立索引 3、执行

    2024年02月03日
    浏览(48)
  • SpringBoot3集成ElasticSearch

    目录 一、简介 二、环境搭建 1、下载安装包 2、服务启动 三、工程搭建 1、工程结构 2、依赖管理 3、配置文件 四、基础用法 1、实体类 2、初始化索引 3、仓储接口 4、查询语法 五、参考源码 标签:ElasticSearch8.Kibana8; Elasticsearch是一个分布式、RESTful风格的搜索和数据分析引擎

    2024年02月12日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包