Elasticsearch —— ES 环境搭建、概念、基本操作、文档操作、SpringBoot继承ES

news2024/11/7 7:51:21

文章中会用到的文件,如果官网下不了可以在这下

链接: https://pan.baidu.com/s/1SeRdqLo0E0CmaVJdoZs_nQ?pwd=xr76

提取码: xr76

一、 ES 环境搭建


注:环境搭建过程中的命令窗口不能关闭,关闭了服务就会关闭(除了修改设置后重启的)

  安装 ES

ES 下载地址: https://www.elastic.co/cn/downloads/elasticsearch 默认打开是最新版本

7.6.1 版下载:

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-windows-x86_64.zip

        新建一个文件夹,重名为 ES ,将 elasticsearch-7.6.1-windows-x86_64.zip 解压

        在 bin 目录中 双击启动 elasticsearch.bat

访问 http://127.0.0.1:9200

成功

  安装数据可视化界面 elasticsearch head

前提需要安装 nodejs 

github 下载 elasticsearch head : https://github.com/mobz/elasticsearch-head/

解压 elasticsearch-head-master.zip 

从界面访问 9200 服务会出现跨域问题

在 es/elasticsearch-7.6.1/config 目录中的 elasticsearch.yml 文件最底下配置

# 开启跨域

http.cors.enabled: true

# 所有人访问

http.cors.allow-origin: "*"

重启 elasticsearch (重新运行elasticsearch.bat)

命令行进入目录(在 \es\elasticsearch-head-master 中)

分别输入:

npm install

*回车

npm run start

*回车

然后访问 http://localhost:9100 或 http://127.0.0.1:9100

成功

  安装可视化 kibana 组件

下载版本要和 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-7.6.1-windows-x86_64.zip汉化 kibana

修改 \es\kibana-7.6.1-windows-x86_64\config 目录下的 kibana.yml 文件

i18n.locale: "zh-CN

双击 bin 目录下的 kibana.bat 启动

访问 http://localhost:5601 或 http://127.0.0.1:5601

  安装 ik 分词器插件

7.6.1 版下载: https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.1/elasticsearch- analysis-ik-7.6.1.zip

解压 elasticsearch-analysis-ik-7.6.1.zip,\es\elasticsearch-7.6.1\plugins 目录下创建名称为ik的文件夹,将解压后的文件复制到 ik 目录。

自定义 ik 分词器(非必要,可以根据实际情况选择配置)

在 elasticsearch-7.6.1\plugins\ik\config

添加 xxx.dic 文件 定义词组

.dic 文件必须是 utf-8 编码格式,否则启动报错

在 IKAnalyzer.cfg.xml 文件添加自定义分词器文件

 * 记得重启 elasticsearch 

在 Kibana 中打开控制台

在没有安装 ik 分词器时 

GET _analyze
{
  "analyzer": "standard",
  "text": "我是中国人"
}

可以看到在没有启用 ik分词器时,分的关键词是单字为组的,不符合正常使用。

这是使用 ik分词器后的:

最少切分:

最细粒度划分:

二、 ES 基本概念


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

索引:同类型文档的集合

文档:一条数据就是一个文档,es 中是 Json 格式

字段:Json 文档中的字段

映射:索引中文档的约束,比如字段名称、类型

●  关系行数据库 MySQL 和 elasticsearch 对比

MySQLElasticsearch说明
TableIndex索引(index),就是文档的集合,类似数据库的表(table)
ROWDocument
文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式
CoLumnField字段(Field),就是JSON文档中的字段,类似数据库中的列(Column)
SchemaMappingMapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema)

Mysql:擅长事务类型操作,可以确保数据的安全和一致性

Elasticsearch:擅长海量数据的搜索、分析、计算

  正向索引和倒排索引

        Mysql 采用正向索引:基于文档 id 创建索引。查询词条时必须先找到文档,而判断是否包含搜索的内容. elasticsearch 采用倒排索引:
        文档(document):每条数据就是一个文档
        词条(term):文档按照语义分成的词语

三、 ES 索引库基本操作


  创建索引库

        mapping 属性 : mapping 是对索引库中文档的约束,常见的 mapping 属性包括:

type:字段数据类型,常见的简单类型有:

字符串:text(可分词的文本),keyword(精确值,例如:品牌,国家,邮箱)

数值:long、integer、short、byte、double、float、

布尔:boolean

日期:date

对象:object

index:是否创建索引参与搜索,默认为 true,如果不需要参与搜索设置为 false

analyzer:使用哪种分词器

实例,创建一个新闻索引库:

PUT /news
{
  "mappings": {
    "properties": {
      "id":{
        "type": "integer",
        "index": false
      },
      "title":{
        "type": "text",
        "analyzer": "ik_max_word"
      },
      "img":{
        "type": "keyword",
        "index": false
      },
      "operTime":{
        "type": "date",
        "index": false
      }
    }
  }
}

  查询索引库

语法: GET /索引库名

实例: GET /news

  删除索引库

语法: DELETE /索引库名

实例: DELETE /news

  修改索引库

索引库和 mapping 一旦创建无法修改(不能删除索引),但是可以添加新的字段,语法如下:

PUT /news/_mapping
{
  "properties":{
    "count":{
      "type":"long"
    }
  }
}

四、 ES 文档操作


  新增文档

语法:

POST /索引库名/_doc/文档 id

{

        “字段名 1”:”值 1”

        “字段名 2”:”值 2”

        .....

}

POST /news/_doc/1
{
  "id":1,
  "title":"小米公司发布最新小米手机",
  "img":"1111111111.jpg",
  "dzcount":30
}
POST /news/_doc/2
{
  "id":2,
  "title":"华为公司最新科技",
  "img":"2222222222.jpg",
  "dzcount":22
}

  查询文档

语法:

GET /索引库名/_doc/文档 id

GET /news/_doc/1

  删除文档

语法:

DELETE /索引库名/_doc/文档 id

DELETE /news/_doc/3

  修改文档

POST /索引库名/_update/文档 id

{

        "doc":{

                "要修改的字段":"新值"

        }

}

  搜索文档(分词查询)

GET /news/_search

{

        "query":{

                "match":{

                        "title":"手机"

                }

        }

}

GET /news/_search
{
    "query":{
      "match":{
        "title":"小米公司"
      }
    }
}

五、 SpringBoot 集成 ES


  搭建

官网地址: https://www.elastic.co/guide/en/elasticsearch/client/index.html

指定版本,版本必须与安装的 ES 版本一致(在 pom.xml 中)

<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 的配置类

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ElasticSearchConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost", 9200, "http")));
        return client;
    }

}

  索引库操作

        • 创建索引库

CreateIndexRequest request = new CreateIndexRequest("users");

CreateIndexResponsecreateIndexResponse = 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 删除失败

新建一个 EStest.java 类 

  文档操作

        • 添加文档

//将新闻添加到 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.coloradmin.cn/o/2229712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSP2024 游记

又是一年 CSP。。。 10 月 5 日&#xff0c;终于过 S 初赛了。。。 然后开始漫长的备战。。 在考试开始前 1 day&#xff0c;我还在兢兢业业地学习图论。然后发现没有考。。。 10 月 25 日下午 15:30&#xff0c;来到 CQBS 试机。我想&#xff0c;怎么测试性能呢&#xff1…

opencv - py_imgproc - py_grabcut GrabCut 算法提取前景

文章目录 使用 GrabCut 算法进行交互式前景提取目标理论演示 使用 GrabCut 算法进行交互式前景提取 目标 在本章中 我们将了解 GrabCut 算法如何提取图像中的前景我们将为此创建一个交互式应用程序。 理论 GrabCut 算法由英国剑桥微软研究院的 Carsten Rother、Vladimir K…

视频制作软件新手必备:8款剪辑工具剪辑思路分享!

随着视频的高度发展&#xff0c;视频已成为一种重要的工具&#xff0c;用以学习娱乐、记录生活点滴以及传递各类信息。不论是制作个人MV、进行企业宣传&#xff0c;还是创作短视频内容&#xff0c;拥有一款功能恰当的视频剪辑软件都显得至关重要。对于初学者而言&#xff0c;选…

无人机避障——路径规划篇(一) JPS跳点搜索算法A*算法对比

JSP 跳点搜索算法与改进 A*算法对比 一、算法概述: 跳点搜索(Jump Point Search,JPS)算法:一种用于路径规划的启发式搜索算法。它主要用于在网格地图(如游戏地图、机器人运动规划地图等)中快速找到从起点到终点的最短路径。该算法在改进 A*算法的基础上进行了优化,通过跳过一…

解决Linux安装Anaconda后出现的conda: command not found问题

参考链接&#xff1a;解决Linux安装Anaconda后出现的conda: command not found问题-百度开发者中心

AI直播带货场景切换模块的搭建!

AI直播带货&#xff0c;作为电商领域的新宠&#xff0c;正以其独特的魅力和高效的营销手段&#xff0c;引领着销售模式的新变革。 在AI直播带货中&#xff0c;场景切换模块是不可或缺的一部分&#xff0c;它不仅能够提升观众的观看体验&#xff0c;还能更好地展示商品&#xf…

15 Docker容器存储架构:docker存储驱动简介

文章目录 一、Docker 存储驱动探索1.1 存储驱动1.2 存储驱动方式1.3 非持久化存储1.4 持久化存储一、Docker 存储驱动探索 1.1 存储驱动 Storage driver处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户提供了多层数据合并后的统一视图。 [superman@docker ~]$…

Aicbo:一键生成高质量画作,适合初学者的AI绘画助手

越来越多的智能工具开始进入人们的视野&#xff0c;它们不仅简化了创作流程&#xff0c;还极大地提高了作品的质量。在这一背景下&#xff0c;Aicbo作为一款新兴的AI绘画工具&#xff0c;以其独特的优势和免费试用的政策&#xff0c;迅速获得了广泛的关注和好评。本文将从多个角…

STM32 从0开始系统学习5

目录 STM32 GPIO输入的四种模式 Practice And Usage 练习与封装 Detailed And Reference 更加具体的说明 输入浮空模式 输入上拉模式 输入下拉模式 模拟功能 我们下面聊一聊输入的事情&#xff0c;输入指的是我们的处理器从外部端口接受外设发过来的信号。在我们没有接…

使用Git进行版本控制的最佳实践

文章目录 Git简介基本概念仓库&#xff08;Repository&#xff09;提交&#xff08;Commit&#xff09;分支&#xff08;Branching&#xff09; 常用命令初始化仓库添加文件提交修改查看状态克隆仓库分支操作合并分支推送更改 最佳实践使用有意义的提交信息定期推送至远程仓库使…

冒泡排序和二分查找--go

冒泡排序的逻辑 二分查找的逻辑 func bubbleSort(arr *[5]int){//冒泡排序fmt.Println(*arr)temp : 0for j : len(*arr); j > 0; j-- {for i : 0; i < j-1; i {temp (*arr)[i]if((*arr)[i] > (*arr)[i1]){(*arr)[i] (*arr)[i1](*arr)[i1] temp}}} }func binaryF…

flutter区别于vue的写法

View.dart 页面渲染&#xff1a; 类似于vue里面使用 <template> <div> <span> <textarea>等标签绘制页面, flutter 里面则是使用不同的控件来绘制页面 样式 与传统vue不同的是 flutter里面没有css/scss样式表&#xff0c; Flutter的理念是万物皆…

电影《焚城》全国上映 王丹妮诠释新时代女性力量

今日&#xff0c;电影《焚城》全国上映&#xff0c;该片由刘德华、白宇、莫文蔚和王丹妮主演&#xff0c;以一场由高强度放射性物质铯137泄漏引发的城市灾难为背景&#xff0c;深刻描绘了人们在生死存亡关头的抉择与抗争。 王丹妮在片中饰演飒爽独立、智慧勇敢的消防队长Madam …

uniapp:启动界面关闭时长控制

代码控制关闭启动界面 App启动后不会自动关闭启动界面&#xff0c;需要在代码中调用plus.navigator.closeSplashscreen关闭启动界面。"app-plus" : {"splashscreen" : {"alwaysShowBeforeRender" : false,"autoclose" : false,}, }很多…

Three.js 快速入门构建你的第一个 3D 应用

![ 开发领域&#xff1a;前端开发 | AI 应用 | Web3D | 元宇宙 技术栈&#xff1a;JavaScript、React、Three.js、WebGL、Go 经验经验&#xff1a;6年 前端开发经验&#xff0c;专注于图形渲染和AI技术 开源项目&#xff1a;github 晓智元宇宙、数字孪生引擎、前端面试题 大家好…

二:java 基础知识(2)-- 初始java/语法基础

目录 idea中文插件 第一个 Java 程序 Java数据类型&#xff0c;常量与变量 1. 数据类型 1.1 基本数据类型 1.2 引用数据类型 2. 常量 2.1 特性 2.2 定义常量 ​编辑 3. 变量 3.1 变量的定义与初始化 3.2 变量的类型 局部变量&#xff1a;在方法内声明的变量&#xff0…

【AAOS】【源码分析】CarSystemUI -- CarSystemBar

CarSystemBar不像Android手机那样固定的顶部“状态栏”和底部“导航栏”,而是将StatusBar和NavigationBar都统称为SystemBar,可以通过如下配置为每侧最多配置一个“系统栏”。 packages/apps/Car/SystemUI/res/values/config.xml<!-- Configure which system bars should …

企业物流管理数据仓库建设的全面指南

文章目录 一、物流管理目标二、总体要求三、数据分层和数据构成&#xff08;1&#xff09;数据分层&#xff08;2&#xff09;数据构成 四、数据存储五、数据建模和数据模型&#xff08;1&#xff09;数据建模&#xff08;2&#xff09;数据模型 六、总结 在企业物流管理中&…

多线程学习篇六:park / unpark

1. API LockSupport.park()&#xff1a;暂停当前线程LockSupport.unpark (线程对象)&#xff1a;恢复某个线程的运行 1.1 先 park 再 unpark main 线程睡眠时间大于 t1 线程睡眠时间 Slf4j(topic "c.Test01") public class Test01 {public static void main(Str…

计算机网络:网络层 —— IPv4 数据报的首部格式

文章目录 IPv4数据报的首部格式IPv4数据报分片生存时间 TTL字段协议字段首部检验和字段 IPv4数据报的首部格式 IPv4 数据报的首部格式及其内容是实现 IPv4 协议各种功能的基础。 在 TCP/IP 标准中&#xff0c;各种数据格式常常以32比特(即4字节)为单位来描述 固定部分&#x…