ElasticSearch从环境搭建到如何使用的全过程

news/2024/11/8 23:29:34 标签: elasticsearch, 大数据, 搜索引擎

ES是什么?

ES是一款非常强大的开源的高扩展的分布式全文检索引擎,可以帮助我们从海量数据中快速找到需要的内容,它可以近乎实时的存储、检索数据。还可以实现日志统计、分析、系统监控等功能。

例如京东、淘宝、头条等站内搜索功能

大数据环境下,Elasticsearch 提供了高效的搜索、实时的数据分析、高可扩展性、灵活的数据模型和强大的生态支持,使其成为处理大规模数据的理想选择。通过合理配置和优化,ES 可以显著提升数据处理和分析的效率,满足各种复杂业务需求。

 

ES环境搭建

 

安装ES

010dcecf176f4dcdbc9025a0d343f37d.png

 

打开ElasticSearch官网,默认下载最新版

7.6.1版本下载

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-windows-x86_64.zip
 
 
解压至存放开发工具的目录
        在bin目录中    双击启动 elasticsearch.bat
 
 
d406d86f193145638c3a27df751211b6.png
 
 
 

安装数据可视化界面      elasticsearch  head

前提需要安装node.js

github 下载: https://github.com/mobz/elasticsearch-head/
github 加速器: https://github.ur1.fun/
 
 
解压
 
从界面访问 9200 服务会出现跨域问题
在 config 目录中的 elasticsearch.yml 文件中配置
# 开启跨域
http.cors.enabled: true
# 所有人访问
http.cors.allow-origin: "*"
 
命令行进入目录
npm install
 
 
输入 npm  run  start  启动
 
访问:http://127.0.0.1:9100/      进行使用可视化工具
 
 
 

安装可视化 kibana  组件

 
        kibana  是一个针对ElasticSearch 的开源分析及可视化平台,用来搜索、查看交互存储在ElasticSearch 索引中的数据。
 
        使用kibana,可以通过各种图表进行高级数据分析及展示。kibana 让海量数据更容易理解
17c1ad5e662a4243b82775361566b07d.png
 
 
 
 
下载版本要和ES版本一致
下载地址: https://www.elastic.co/cn/downloads/kibana 默认打开是最新版本
7.6.1 下载版
https://artifacts.elastic.co/downloads/kibana/kibana-7.6.1-windows-x86_64.zip
 
汉化 kibana
        修改 config 目录下的kibana.yml  文件    
 
双击 bin 目录下的 kibana.bat 启动
 
 
fa66a79ab433410a8d60371158f322bf.png
 
 

安装ik 分词器插件

 
 
        7.6.1版下载
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.1/elasticsearch-
analysis-ik-7.6.1.zip
解压,在elasticsearch-7.6.1\plugins目录下创建名称为ik的文件夹,将解压后的文件复
制到 ik 目录.
自定义 ik 分词器(非必要,可以根据实际情况选择配置)
 
 
elasticsearch-7.6.1\plugins\ik\config
添加 xxx.dic 文件 定义词组, .dic 文件必须是 utf-8 编码格式,否则启动报错
在 IKAnalyzer.cfg.xml 文件添加自定义分词器文件
d3e0a5325899430392038c4531e648e2.png
 
 
 

IK分词器

在搜索时,需要对用户输入内容分词。但默认的分词规则对中文处理并不友好。

在kibana 的 DevTools 中测试

        analyzer": "english", //分词器类型
        "text": "我是中国人" //分词内容
 
英文分词
ff8d10bb3b4d4191ae3fc5141a1e864b.png
 
 
 
标准分词
c7cd0036a00e4ea491a99ef3c1f3c632.png
 
添加分词器(参考环境搭建部分)
 
最少切分
 
4118520f42e74a7793d5a77c288c2571.png
 
 
 
 
最细粒度划分
 
2fc8820167884f58aa7165565244ae41.png
 
 
 
还可以自定义分词(参考安装部分)
97f6deb15a154b6a9ac9b8e20ef4e825.png
 
c12d9340be7b4ad890f4251053e7c468.png
 
 
 

ES基本概念

        es是面向文档存储的,可以是数据库中的一条商品数据,一个订单信息。文档数据会被序列化为json格式后存储在es中。

3f9aa805d7544d98b1577b84723e0bd2.png

 

索引:同类型文档的集合
文档:一条数据就是一个文档,es 中是 Json 格式
字段:Json 文档中的字段
映射:索引中文档的约束,比如字段名称、类型
 
59da795280e44524bc0f34ffbc6eedff.png
 
各有千秋:mysal擅长事务控制,确保数据安全和一致性;es擅长海量数据的搜索、分析、计算
 
c65a719237fa425ea278eabaaff54f51.png
 
 
 
 
 

正向索引和倒排索引

MySQL采用正向索引:基于文档id 创建索引。 查询词条时必须先找到文档,而后判断是否包含搜索的内容。

elasticsearch采用倒排索引:

        文档:每条数据就是一个文档

        词条:文档按照语义分成的词语

94ee4961456648f39928342ec333cd59.png

37ec8838ac0f4c4691672c98d397bfb8.png

 

ES索引库基本操作

创建索引库

mapping 属性
mapping 是对索引库中文档的约束,常见的 mapping 属性包括:
type:字段数据类型,常见的简单类型有:
字符串:text(可分词的文本),keyword(精确值,例如:品牌,国家,邮箱)
数值:long、integer、short、byte、double、float、
布尔:boolean
日期:date
对象:object
index:是否创建索引参与搜索,默认为 true,如果不需要参与搜索设置为 false
analyzer:使用哪种分词器
 
 
创建索引库和 mapping 的语法如下:
e4e3e7dcea13460da08f0165bb283ebb.png
 
 
示例,创建一个新闻索引库
d447f7788ee34af692411f1bbd9c5c85.png
 
 
 
查询索引库
        语法: GET /索引库名
        实例: GET /news
 
删除索引库
        语法: DELETE /索引库名
        实例: DELETE /news
 
修改索引库
        索引库和 mapping  一旦创建无法修改,但是可以添加新的字段,语法如下:
 
d74282fdda024a84871b5b8bd75b3c89.png
 
 
 

ES文档操作

 

新增文档
语法:
POST /索引库名/_doc/文档 id
{
“字段名 1”:”值 1”
“字段名 2”:”值 2”
.....
}
查询文档
语法:
GET /索引库名/_doc/文档 id
删除文档
语法:
DELETE /索引库名/_doc/文档 id
修改文档
POST /索引库名/_update/文档 id
{
"doc":{
"要修改的字段":"新值"
}
}
 
搜索文档
GET /news/_search
{
"query":{
"match":{
"title":"美国"
}
}
}
 
 
 
 

SpringBoot集成ES

搭建

 
官网地址: https://www.elastic.co/guide/en/elasticsearch/client/index.html
 
b86d533a84ec4df682f42ab639ab28a6.png
 
<properties>
<java.version>1.8</java.version>
<elasticsearch.version>7.6.1</elasticsearch.version>
</properties>

添加依赖

<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>

添加初始化 RestHighLevelClient 的配置类

 

索引库操作

创建索引库

CreateIndexRequest request = new CreateIndexRequest("users");
CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);

判断索引库是否存在

GetIndexRequest request = new GetIndexRequest("users");
boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);

删除索引库

DeleteIndexRequest indexRequest = new DeleteIndexRequest("users");
AcknowledgedResponse delete = restHighLevelClient.indices().delete(indexRequest, RequestOptions.DEFAULT);
delete.isAcknowledged();//返回 true 删除成功,返回 false 删除失败

 

文档操作

添加文档

//将新闻添加到 mysql 的同时,将数据同步更新到 ES,为搜索提供数据
News news = new News();
news.setId(3);
news.setTitle("美国今年要总统选择,拜登着急了");
news.setImg("aaaaasssss.jpg");
IndexRequest indexRequest = new IndexRequest("news").id(news.getId().toString());
//将对象转为 json 存进 ES
indexRequest.source(new ObjectMapper().writeValueAsString(news),XContentType.JSON);
restHighLevelClient.index(indexRequest,RequestOptions.DEFAULT);

修改文档

News news = new News();
news.setId(3);
news.setTitle("中国航母开往美国,准备开战,拜登着急了");
news.setImg("dddddddddddd.jpg");
UpdateRequest updateRequest = new UpdateRequest("news",news.getId().toString());
updateRequest.doc(new ObjectMapper().writeValueAsString(news), XContentType.JSON);
restHighLevelClient.update(updateRequest,RequestOptions.DEFAULT);

查询文档

GetRequest getRequest = new GetRequest("news","1");
GetResponse getResponse = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
//获取查询的内容,返回 json 格式
String json = getResponse.getSourceAsString();
//使用 jackson 组件将 json 字符串解析为对象
News news = new ObjectMapper().readValue(json, News.class);

删除文档

DeleteRequest deleteRequest = new DeleteRequest("news","1");
DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);

最后是非常强大的搜索功能-搜索文档

SearchRequest searchRequest = new SearchRequest("news");
SearchRequest searchRequest = new SearchRequest("news");
//精确条件查询
searchRequest.source().query(QueryBuilders.termQuery("title","美国"));
//发送查询请求
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
//接收查询结果
SearchHits hits = search.getHits();
//组装查询结果
ArrayList<News> list = new ArrayList<>();
//取出结果集
for (SearchHit searchHit : hits.getHits()){
String json = searchHit.getSourceAsString();
News news = new ObjectMapper().readValue(json,News.class);
list.add(news);
}

 

 


http://www.niftyadmin.cn/n/5744550.html

相关文章

SpringBoot开发——Spring Boot 3种定时任务方式

文章目录 一、什么是定时任务二、代码示例1、 @Scheduled 定时任务2、多线程定时任务3、基于接口(SchedulingConfigurer)实现动态更改定时任务3.1 数据库中存储cron信息3.2 pom.xml文件中增加mysql依赖3.3 application.yaml文件中增加mysql数据库配置:3.4 创建定时器3.5 启动…

鸿蒙多线程开发——并发模型对比(Actor与内存共享)

1、概 述 并发是指在同一时间段内&#xff0c;能够处理多个任务的能力。为了提升应用的响应速度与帧率&#xff0c;以及防止耗时任务对主线程的干扰&#xff0c;HarmonyOS系统提供了异步并发和多线程并发两种处理策略。 异步并发&#xff1a;指异步代码在执行到一定程度后会被…

LabVIEW扫描探针显微镜系统

开发了一套基于LabVIEW软件开发的扫描探针显微镜系统。该系统专为微观尺度材料的热性能测量而设计&#xff0c;特别适用于纳米材料如石墨烯、碳纳米管等的研究。系统通过LabVIEW编程实现高精度的表面形貌和热性能测量&#xff0c;广泛应用于科研和工业领域。 项目背景 随着纳…

如何创建备份设备以简化 SQL Server 备份过程?

SQL Server 中的备份设备是什么&#xff1f; 在 SQL Server 中&#xff0c;备份设备是用于存储备份数据的物理或逻辑介质。备份设备可以是文件、设备或其他存储介质。主要类型包括&#xff1a; 文件备份设备&#xff1a;通常是本地文件系统中的一个或多个文件。可以是 .bak 文…

开源数据库 - mysql - innodb源码阅读 - master线程(一)

master struct /** The master thread controlling the server. */void srv_master_thread() {DBUG_TRACE;srv_slot_t *slot; // 槽位THD *thd create_internal_thd(); // 创建内部线程ut_ad(!srv_read_only_mode); //断言 srv_read_only_mode 为 falsesrv_main_thread_proce…

MySQL核心业务大表归档过程

记录一下2年前的MySQL大表的归档&#xff0c;当时刚到公司&#xff0c;发现MySQL的业务核心库&#xff0c;超过亿条的有7张表&#xff0c;最大的表有9亿多条&#xff0c;有37张表超过5百万条&#xff0c;部分表行数如下&#xff1a; 在测试的MySQL环境 &#xff1a; pt-archiv…

(一)NodeJS环境安装、创建第一个Vue应用

&#xff08;一&#xff09;环境安装、创建第一个Vue应用 Vue官网Windows上安装Node.js安装Node.js开发工具使用选择VSWebStorm 2021.3 创建第一个Vue应用&#xff08;通过 CDN 使用 Vue&#xff09;通过脚本引入&#xff1a;如何使用呢&#xff1f;页面效果 Vue官网 Vue官网&a…

Go的数组,slice切片,map的使用

在Go语言中&#xff0c;数组是一种固定长度的数据结构&#xff0c;可以存储同一类型的元素。数组的长度是数组类型的一部分&#xff0c;因此在定义时必须明确指定长度。数组的元素可以通过索引访问&#xff0c;索引从0开始。 1. 数组的声明与初始化 在Go中&#xff0c;可以使…