当前位置: 首页 > news >正文

ElasticSearch入门篇

简介

ElasticSearch简介:简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单个开源的分布式搜索引擎,可以用来实现搜索,日志统计,分析,系统监控等多种功能。

Elastic Stack(ELK):是以Elasticsearch为核心的技术栈,其中包括beats。logstash,kibanba,Elasticsearch。

正向索引和倒排索引

正向索引,假设我们有一个商品表,id是主键

如果我们按照id查询数据,他会走索引,查询效率很快,但是一般来说我们是会按照title来搜索,sql语句如下:

select * from good where title like “%手机%”

他查询需要全表扫描,一个个去匹配,效率可想而知,这就是正向索引,他在做局部内容检索的时候效率十分底。

倒排索引

文档:每条数据就是一个文档,类似于数据库中一张表的一条数据

词条:就是把文档分成一个个词语

假如同样我们搜索华为手机,基于倒排索引,他首先会将华为手机进行分词,获得文档id之后基于id进行查询文档,这时候虽然经过两次检索,但是每次都是基于索引的,总的来说,效率很高。

MySQL和Es的概念对比

Mysql:擅长事务类型操作,可以确保数据的安全和一致性
Elasticsearch:擅长海量数据的搜索、分析、计算

安装Elasticsearch和kibana

安装Elasticsearch

我们这里继续使用docker来安装

1,创建一个网络,因为我们需要让kibana容器和es互联

docker network create es-net

2,拉取镜像

docker pull elasticsearch

 但是es有差不多一个G拉取速度太慢,建议下载制作好的文件,上传,直接加载成镜像,例如上传es.tar将他加载为镜像,速度会很快。

 如果你直接拉取的镜像这个命令不需要执行:

docker load -i es.tar

3,运行es容器

docker run -d \--name es \-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \-e "discovery.type=single-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/usr/share/elasticsearch/plugins \--privileged \--network es-net \-p 9200:9200 \-p 9300:9300 \
elasticsearch:7.12.1

命令解释:

  • -e "cluster.name=es-docker-cluster":设置集群名称

  • -e "http.host=0.0.0.0":监听的地址,可以外网访问

  • -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":内存大小,因为他是基于java开发的

  • -e "discovery.type=single-node":非集群模式

  • -v es-data:/usr/share/elasticsearch/data:挂载逻辑卷,绑定es的数据目录

  • -v es-logs:/usr/share/elasticsearch/logs:挂载逻辑卷,绑定es的日志目录

  • -v es-plugins:/usr/share/elasticsearch/plugins:挂载逻辑卷,绑定es的插件目录

  • --privileged:授予逻辑卷访问权

  • --network es-net :加入一个名为es-net的网络中

  • -p 9200:9200:端口映射配置

4,浏览器输入ip:9200如果出现

 安装成功!!!!

安装Kibana

kibana可以给我们提供一个elasticsearch的可视化界面,便于我们更方便使用es

1,拉取镜像

docker pull kibana

这里还是建议上传打包好的镜像,将他重新加载成镜像,如果直接拉取不需要执行这个命令

docker load -i kibana.tar

 2,启动kibana容器

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1

命令解释:

  • --network es-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中

  • -e ELASTICSEARCH_HOSTS=http://es:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch

  • -p 5601:5601:端口映射配置

3,浏览器输入ip:5601即可查看-(启动较慢,稍等一会)

安装成功!!!

ES-操作索引库(类似MySQL的表)

mapping属性

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

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

        字符串:text(可分词文本),keyword(不可分词,例如国家,品牌,ip等等)

        数值:long,integer,short,double,float

        布尔:boolean

        日期:date

        对象:object

index:是否创建索引,默认为true。

analyzer:使用那种分词器。

properties:子字段,对象嵌套时需要。

创建索引库-类似于数据库的表

假如我们数据库有一个用户表,其中一条数据如下:

{  "id": 1,  "age": 21,  "weight": 52.1,  "isMarried": false,  "info": "csdn最靓的崽!!",  "email": "gde@nb.cn",  "scores": [  99.1,99.5,98.9],  "name": {  "firstName": "蛋儿",  "lastName": "狗"  }  
}

不难看出数据库表如何创建的,我们来看看在es中如何创建 索引库

这是一个示例:

# 创建索引库
PUT /索引库名称
{"mappings": {"properties": {"字段1":{"type":"类型,例如text",, "analyzer": "使用哪种分词器"},"字段2":{"type": "类型,例如keyword","index": false # 不适用索引},"字段3":{"properties": {"子字段1";{"type":"字段类型"},"子字段2";{"type":"字段类型"}}}}}
}

 实现之后(我们取少量字段):


# 创建索引库
PUT /userinfo
{"mappings": {"properties": {"info":{"type":"text","analyzer": "ik_smart"},"email":{"type": "keyword","index": false },"age":{"type": "integer","index": false},"name":{"properties": {"dirstName":{"type":"keyword"},"lastName":{"type":"keyword"}}}}}
}

 注意:索引名必须小写!!

索引库查询

GET /索引库名

索引库删除

DELETE /索引库名

索引库修改

需要注意的是es在索引库创建的时候就会基于索引库创建倒排索引,如果修改索引库结构倒排索引就会失效,所以,es是不允许修改索引库的,但是可以在索引库中增加新的字段。

# 向索引库中增加一个字段
PUT /索引库名/_mapping
{"properties":{"新字段名":{"type":"字段类型"}}
}

Es-操作文档

(类似MySQL的数据)

 索引库插入一条文档

示例语句:

# 向索引库中插入一条数据
POST /userinfo/_doc/文档id,例如1,2。。。
{"字段1":"值1","字段2":"值2","字段3":{"子属性1":"值3","子属性2":"值4"}
}

具体实现:

# 向索引库中插入一条数据
POST /userinfo/_doc/1
{"info":"csdn最靓的崽!!","email":"gde@nb.cn","age":"20","name":{"dirstName":"狗","lastName":"蛋儿"}
}

索引库查询的文档

# 查询id为1的数据
GET /索引库名/_doc/1#查询所有数据
GET /userinfo/_search  
{  "query": {  "match_all": {}  }  
}

索引库删除一条文档

#删除id为1的数据
DELETE /userinfo/_doc/1

索引库修改文档

1,全量修改

原本插入文档使用的是POST请求这时候只需要换成PUT请求即可,它会将原有的文档删除在重新插入,例如:

# 全量修改 修改索引库中id为1的数据,如果不存在就插入
PUT /userinfo/_doc/1
{"info":"csdn最靓的崽!!","email":"gde@nb.cn","age":"20","name":{"dirstName":"狗","lastName":"蛋儿"}
}

2,局部修改


# 局部修改
POST /userinfo/_update/1
{"doc": {"age":"99"}
}

至此es基础篇完结!!!!!!

相关文章:

ElasticSearch入门篇

简介 ElasticSearch简介:简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene…...

MAXHUB会议解决方案持续进化,以“高效”为核心推动行业发展

4月16日,MAXHUB 2024新品发布会在视源股份(002841)北京产业园圆满举行。本次发布会以“智会融合 进化不止”为主题,首发MAXHUB高效会议解决方案,以AI智能、开放兼容、场景化交付为方向,为用户提供高效、便捷…...

CentOS 7安装Redis

说明:本文介绍如何在CentOS 7操作系统下安装Redis 下载安装 首先,去官网上下载所需要安装的版本,官网地址:https://download.redis.io/releases/,我这里下载3.2.1版本的 下载完,上传到云服务器上&#xf…...

Kubernetes (K8s) 部署前后端分离项目

要使用Kubernetes (K8s) 部署一个涵盖Django后端、Vue前端、Redis、Nginx、RabbitMQ和MySQL的前后端分离项目,需要遵循以下步骤。这个过程涉及创建和配置多个资源,包括部署(Deployments)、服务(Services)、配置映射(ConfigMaps)、密钥(Secrets)和Ingress规则。 大纲…...

MLT媒体程序框架01:概述

MLT官网 概述 MLT是一个开源的多媒体框架,专为电视广播而设计和开发。它为广播公司、视频编辑器、媒体播放器、转码器、网络流媒体和更多类型的应用程序提供了一个工具包。该系统的功能是通过各种现成的工具、XML创作组件和基于API的可扩展插件提供的。 它是通过…...

9【原型模式】复制一个已存在的对象来创建新的对象

你好,我是程序员雪球。 今天我们来学习23种设计模式之原型模式,在平时开发过程中比较少见。我带你了解什么是原型模式,使用场景有哪些?有什么注意事项?深拷贝与浅拷贝的区别,最后用代码实现一个简单的示例…...

谷粒商城实战(013 业务-认证服务-短信验证)

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强 总时长 104:45:00 共408P 此文章包含第211p-第p219的内容 介绍 认证中心要集成 社交登录、OAuth2.0、单点登录 等功能 OAuth 2.0: 问题解决: OAuth 2.0 主要…...

Unity中支持泰语--没有版权限制

在Unity中支持泰语主要涉及以下几个方面: 选择合适的字体:在Unity中,确保使用支持泰文字符的字体是至关重要的。例如,可以选择使用Noto Serif Thai字体,这是一个支持泰语的字体2。 处理Unity版本问题:某些…...

C语言传统垃圾收集器的缺陷以及我的思路

传统的比如Boehm回收器,都是在malloc/realloc/free上做文章,参考这篇文章【How the Boehm Garbage Collector Works】的解释,因为C数据结构是无法预料的,内存里面并没有特殊标记,很难判断哪些是指针哪些是数据&#xf…...

数据交换格式

一、什么是数据交换格式 在计算机的不同程序之间,或者不同的编程语言之间进行交换数据,也需要一种大家都能听得懂得‘语言’,这就是数据交换格式,它通过文本以特定的形式来进行描述数据。 二、常用的几种数据交换格式 客户端常…...

电力系统卫星授时信号安全隔离装置防护方案

电力系统是国家关键基础设施, 电力安全关系国计民生, 是国家安全的重要保障, 与政治安全、经济安全、 网络安全、社会安全等诸多领域密切关联。电网运行情况瞬息万变,为了在其发生事故时能够及时得到处理,需要统一的时…...

【编程TOOL】VC++6.0下载安装配置使用保姆式教程

目录 ​编辑 1.软件介绍 2.软件下载 3.软件安装 3.1.下载得到可执行文件并双击进行安装 3.2. 点击下一步 3.3. 选择安装位置 3.4. 勾选“创建桌面快捷方式”并点击下一步 5. 点击安装并等待 3.6. 先取消运行,后点击完成,软件即安装完毕 4.兼容性配置 4.1…...

组织机构代码是哪几位?营业执照怎么看组织机构代码?

组织机构代码是哪几位? 组织机构代码通常指的是组织机构代码证上的一组特定数字,它用于唯一标识一个组织或机构。在中国,组织机构代码由9位数字组成,前8位是本体代码,最后1位是校验码。这组代码是按照国家有关标准编制的&#x…...

nginx禁止ip访问,只允许域名访问

无论ip直接访问,还是通过域名访问,最终都是通过ip访问到服务器浏览器访问时会携带Host参数,通过ip访问时携带的是ip,通过域名访问时携带的是域名nginx收到请求后判断host的值,如果判断出不是通过域名访问的则拒绝&…...

10组Python面试高频问题与详尽解答指南

大家好,你们准备好了吗?面试官们总喜欢出其不意地问些让人头大的问题。别担心,今天我来帮你们梳理10个Python面试中的热门难题,让你的回答既专业又有趣!让我们一起变身Python高手吧! 1. 问题: 什么是Pytho…...

使用SpringBoot将中国地震台网数据保存PostGIS数据库实践

目录 前言 一、数据转换 1、Json转JavaBean 2、JavaBean与数据库字段映射 二、空间数据表设计 1、表结构设计 三、PostGIS数据保存 1、Mapper接口定义 2、Service逻辑层实现 3、数据入库 4、运行实例及结果 总结 前言 在上一篇博客中基于Java的XxlCrawler网络信息爬…...

后端返回树结构

出参结构 Getter Setter public class TreeResponse implements Serializable {// 主键private Long id;// 父级节点private Long parentId;// 层级private Byte layer;// 编码private String docCode;// 名称private String docName;// 子节点private List<TreeResponse&g…...

C语言——通讯录的实现

一.前言 嗨嗨嗨&#xff0c;又和大家见面了&#xff01;前面我们讲到了如何实现一个循序表。现在我们开始讲解如何基于循序表来实现通讯录功能。 二.正文 通讯录中的SeqlList.h #pragma once //#define SLDateType int #include<stdio.h> #include<stdlib.h> #…...

Next-Scale Prediction、InstantStyle、Co-Speech Gesture Generation

本文首发于公众号&#xff1a;机器感知 Next-Scale Prediction、InstantStyle、Co-Speech Gesture Generation Visual Autoregressive Modeling: Scalable Image Generation via Next-Scale Prediction We present Visual AutoRegressive modeling (VAR), a new generation p…...

class中 padding和margin的用法;

如果我们想要移动盒子等的位置 &#xff0c;除了可以用相对定位和绝对定位还可以用margin 和paddinng&#xff1b; 结构如图所示 margin和padding的用法&#xff1a; padding和margin后面可以跟1或2或3或4个数&#xff0c;按照顺序分别是上&#xff0c;右&#xff0c;下&…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...