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

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

链接: 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 {@Beanpublic 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.mzph.cn/diannao/58796.shtml

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

相关文章

Python编程中提升效率的8个实用代码

引言 Python 以其简洁易读著称&#xff0c;但有时候&#xff0c;一些巧妙的小技巧能让代码变得更加高效、优雅。本文将介绍八种提升 Python 编程效率的单行代码技巧&#xff0c;帮助你在日常开发中更加得心应手。下面&#xff0c;我们将从基础出发&#xff0c;逐步深入&#x…

Android 音量调节流程分析

音量调节流程分析 按下音量键 音量键被按下后&#xff0c;按键事件会一路派发给Acitivity&#xff0c;如果无人拦截并处理&#xff0c;承载当前Activity的显示PhoneWindow类的onKeyDown()以及onKeyUp()函数将会被处理&#xff0c;从而开始通过音量键调整音量的处理流程&#x…

【设计模式】《Java 设计模式魔法:解锁高效编程的秘密武器》

标题&#xff1a;《Java 设计模式奇幻之旅&#xff1a;解锁高效编程的魔法钥匙》 摘要&#xff1a; 本文将深入探讨 Java 中的十种设计模式&#xff0c;包括单例模式、工厂方法模式、抽象工厂模式…迭代器模式、组合模式、模板方法模式等。通过详细的解释、生动有趣的例子以及…

如何防止U盘盗取电脑数据?

数据安全无论是对企业还是个人都至关重要。这些用户群体随时面临着数据被窃取的风险&#xff0c;而 U 盘则成为了潜在的安全隐患。如果你想要禁止电脑上使用 这类USB 存储设备&#xff0c;看完这篇文章&#xff0c;防止 U 盘盗取数据并非难事。 禁止使用usb存储设备 打开电脑上…

虚拟机 Ubuntu 扩容

文章目录 一、Vmware 重新分配 Ubuntu 空间二、Ubuntu 扩容分区 一、Vmware 重新分配 Ubuntu 空间 先打开 Vmware &#xff0c;选择要重新分配空间的虚拟机 点击 编辑虚拟机设置 &#xff0c;再点击 硬盘 &#xff0c;再点击 扩展 选择预计扩展的空间&#xff0c;然后点击 扩展…

用 AI 革新医学:从早期检测到精准护理

AI 通过实现早期疾病检测、改进诊断和个性化护理来改变医学。 c AI 与放射科医生合作以提高诊断准确性 一段时间以来,AI 一直是医疗诊断的重要辅助工具。一项日本研究表明,ChatGPT 比该领域的专家进行了更准确的评估。 在执行了 150 次诊断后,神经放射学家记录了 AI 的 80…

vite5 打包项目兼容ie和低版本chrome

背景&#xff1a; vite打包后的项目 在低版本chrome无法使用 直接打包项目在69版本的chrome上无法加载 报错 解决方法&#xff1a; 使用vite官方推荐的插件 vitejs/plugin-legacy 1、下载 npm i vitejs/plugin-legacy -D 2、vite.config.js import legacy from "vit…

最逼真的AI换脸软件,Pluse下载介绍(可直播)

Pluse是基于人工智能的实时AI换脸工具&#xff0c;可以在无需任何前期数据训练的情况下&#xff0c;通过一张照片快速替换视频中的人脸&#xff0c;它支持高分辨率细节重建、色彩矫正&#xff0c;并能实时替换多目标人脸&#xff0c;非常适合娱乐社交、影视制作和虚拟现实等多种…

在米尔电子MPSOC实现12G SDI视频采集H.265压缩SGMII万兆以太网推流

1. 引言 随着网络视频平台的发展&#xff0c;用户对于4K高清画质的需求日益增长。然而&#xff0c;许多用户发现&#xff0c;即使购买了视频平台的会员&#xff0c;观看4K内容时画质却不如预期&#xff0c;有时甚至还会出现模糊、卡顿的情况。这种现象背后涉及到视频编码、网络…

数据结构与算法实验练习(三)(排序及线性表的应用)

数据结构与算法分析课下实验练习&#xff0c;现记录一下解答过程&#xff0c;欢迎大家批评指正。 声明&#xff1a;本题目来源于西安交通大学电信学院原盛老师&#xff0c;任何单位或个人在使用、转载或引用本题目时&#xff0c;请务必标明出处为“西安交通大学电信学院原盛老…

日志代码编写

&#x1f30e;日志代码编写 文章目录&#xff1a; 日志代码编写 了解日志 日志编写       日志等级       获取时间信息       获取文件名行号及处理可变参数列表       以宏的形式传参       日志加锁       日志消息输出方式 完整代码 …

HCIA笔记整合

第一部分&#xff1a; OSI七层模型 应用层&#xff1a;人机交互 抽象语言--------编码 表示层&#xff1a;编码------二进制 会话层&#xff1a;提供会话号 传输层&#xff1a;TCP/UDP 分段&#xff08;收到MTU值的限制&#xff09; MTU&#xff1a;最大传输单元&#xff…

Kafka集群数据迁移方案

概述 MirrorMaker2&#xff08;后文简称 MM2&#xff09;在 2019 年 12 月随 Kafka 2.4.0 一起推出。顾名思义&#xff0c;是为了解决 Kafka 集群之间数据复制和数据同步的问题而诞生的 Kafka 官方的数据复制工具。在实际生产中&#xff0c;经常被用来实现 Kafka 数据的备份&a…

Prometheus监控平台部署与应用

Prometheus特点 多维数据模型 PromSQL&#xff1a;一种灵活的查询语言&#xff0c;可以利用多维数据完成复杂的查询 不依赖分布式存储&#xff0c;单个服务器节点可直接工作 基于HTTP的pull方式采集时间序列数据 推送时间序列数据通过PushGateway组件支持 通过服务发现或静态配…

vue3 栅栏式拖拽布局组件

先看效果&#xff1a; 使用方法&#xff1a; 1、npm install fencelayout 2、引入使用 <template><Fencelayout><!-- 需要写的模块直接嵌套在这个下面就可以 --><div class"aaaa"><a-button>模块1</a-button></div><…

探索设计模式:命令模式

探索设计模式&#xff1a;命令模式 &#x1f9d0;1. 概念&#x1f3af;2. 作用&#x1f4e6;3. 实现3.1 定义命令接口3.2 实现具体命令3.3 实现接收者3.4 实现调用者3.5 使用 &#x1f4bb;4. 应用场景 命令模式&#xff08;Command Pattern&#xff09;就是一种行为型设计模式…

茅台最新任务脚本

茅台最新任务脚本 –小白教程— 这个脚本的作用是实现i茅台应用的自动预约功能&#xff0c;主要功能包括生成请求头、预约商品、计算距离和库存情况、发送微信推送消息等。 代码如下#!/usr/bin/python3cron: 0 0 9/21 * * * new Env(i茅台) import logging import sysimpor…

​CSS之三

CSS三大特性 CSS 有三个非常重要的三个特性:层圣性、继承性、优先级 层叠性 相同选择器给设置相同的样式&#xff0c;此时一个样式就会覆盖(层曼)另一个冲突的样式。层曼性主要解决样式冲突的问题 层叠性原则: - 样式冲突&#xff0c;遵循的原则是就近原则&#xff0c;哪个…

C++设计模式创建型模式———简单工厂模式、工厂方法模式、抽象工厂模式

文章目录 一、引言二、简单工厂模式三、工厂方法模式三、抽象工厂模式四、总结 一、引言 创建一个类对象的传统方式是使用关键字new &#xff0c; 因为用 new 创建的类对象是一个堆对象&#xff0c;可以实现多态。工厂模式通过把创建对象的代码包装起来&#xff0c;实现创建对…

python爬虫抓取豆瓣数据教程

环境准备 在开始之前&#xff0c;你需要确保你的Python环境已经安装了以下库&#xff1a; requests&#xff1a;用于发送HTTP请求。BeautifulSoup&#xff1a;用于解析HTML文档。 如果你还没有安装这些库&#xff0c;可以通过以下命令安装&#xff1a; pip install requests…