初识ES(ES的基本概念、倒排索引、索引和文档的CRUD)

1、ES是什么?

一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能。ES的底层是基于Lucene实现的。

Lucene是一个Java语言的搜索引擎类库。

什么是elastic stack(ELK)?
  • elasticsearch。存储、计算、搜索数据

  • Kibana。数据可视化

  • Logstash、beats。数据抓取

2、倒排索引

ES数据库是基于倒排索引进行存储和查找的。

倒排索引是基于MySQL这样的正向索引而言的。

正向索引流程:

倒排索引中有两个非常重要的概念:

  • 文档(Document):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息

  • 词条(Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。如:小米发布会开始。可以分词为:小米,发布会,发布,开始这几个词条。

其中词条具有唯一性,可以给其创建索引,如hash索引。加快检索速度。

在倒排索引中的搜索流程是:

  • 用户搜索“问界汽车”

  • 对小米汽车进行分词,分为“问界”,“汽车”

  • 去倒排索引中找,可以拿到文档id:2,3。

  • 拿着文档id去正向索引中查找具体文档。

  • 无论是词条查询,还是文档id查询,两个都建立了索引,查询速度都不低。

3、ES数据库中的基本概念:

eS数据库中的概念

MySQL的概念

索引 (Index)

数据库 (Database)

类型 (Type)

表 (Table)

文档 (Document)

行 (Row)

字段 (Field)

列 (Column)

Mapping

架构 (Schema)

其中Type这个概念在es6的时候被废弃,es7中被完全删除,所以在上面表格中此时索引所对应的是表。

MySQL

Elasticsearch

说明

Table

Index

索引(index),就是文档的集合,类似数据库的表(table)

Row

Document

文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式

Column

Field

字段(Field),就是JSON文档中的字段,类似数据库中的列(Column)

Schema

Mapping

Mapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema)

SQL

DSL

DSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD

4、索引库操作

索引库类似于数据库中的表,mapping类似于表结构。

所以想要在es中存储数据我们就需要先创建表。

4.1 Mapping的构建

再MySQL中构建一个表,其中一个字段有好多属性,如是否唯一,数据类型,数据大小,是否为外键等等。构建Mapping也是如此,其中一个字段也有一些需要设置的属性。

其中有一些常见属性需要设置:

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

    • 字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)

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

    • 布尔:boolean

    • 日期:date

    • 对象:object

  • index:是否创建索引,默认为true。如果为true的话会为这个字段创建倒排索引。

  • analyzer:使用哪种分词器。

    • IK分词器包含两种模式:

      • ik_smart:最少切分

      • ik_max_word:最细切分

  • properties:该字段的子字段

{"age":21,"weight":52.1,"isMarried":false,"info":"真相只有个!","email":"zy@itcast.cn","score":[99.1,99.5,98.9],"name":{"firstName":"柯","lastName":"南"}}

对应的每个字段映射(mapping):

  • age:类型为 integer;参与搜索,因此需要index为true;无需分词器

  • weight:类型为float;参与搜索,因此需要index为true;无需分词器

  • isMarried:类型为boolean;参与搜索,因此需要index为true;无需分词器

  • info:类型为字符串,需要分词,因此是text;参与搜索,因此需要index为true;分词器可以用ik_smart

  • email:类型为字符串,但是不需要分词,因此是keyword;不参与搜索,因此需要index为false;无需分词器

  • score:虽然是数组,但是我们只看元素的类型,类型为float;参与搜索,因此需要index为true;无需分词器

  • name:类型为object,需要定义多个子属性

    • name.firstName;类型为字符串,但是不需要分词,因此是keyword;参与搜索,因此需要index为true;无需分词器

    • name.lastName;类型为字符串,但是不需要分词,因此是keyword;参与搜索,因此需要index为true;无需分词器

4.2 索引库的CRUD

CRUD简单描述:

  • 创建索引库:PUT /索引库名

  • 查询索引库:GET /索引库名

  • 删除索引库:DELETE /索引库名

  • 修改索引库(添加字段):PUT /索引库名/_mapping

  • 创建索引库

PUT /my_index
{"mappings": {"properties": {"name": {"type": "keyword"},"self-introduction": {"type": "text","analyzer":"ik_smart"}}}
}
  • 查询索引库

GET /my_index

  • 删除索引库

DELETE /my_index

  • 修改索引库

//这里的修改是只能增加新的字段到mapping中,因为一旦修改Mapping结构,就需要重新构建倒排索引结构,那么工作量太大了。允许添加新的字段到mapping中,因为不会对倒排索引产生影响
PUT /my_index/_mapping
{"properties": {"age":{"type": "integer","index":"false"}}
}

5、文档操作

文档操作有哪些?

  • 插入文档:POST /{索引库名}/_doc/文档id

  • 查询文档:GET /{索引库名}/_doc/文档id

  • 删除文档:DELETE /{索引库名}/_doc/文档id

  • 修改文档:

    • 全量修改:PUT /{索引库名}/_doc/文档id

    • 增量修改:POST /{索引库名}/_update/文档id { "doc": {字段}}

  • 插入文档

POST /my_index/_doc/1
{"name": "wubing","self-introduction": "我是一个活泼开朗的人","age": 21
}
  • 查询文档

GET /my_index/_doc/1//批量查询:查询该索引库下的全部文档GET /my_index/_search
  • 修改文档

//根据指定的id删除文档,新增一个相同id的文档
//注意:如果根据id删除时,id不存在,第二步的新增也会执行,也就从修改变成了新增操作了。
PUT /my_index/_doc/1
{"name": "wubing","self-introduction": "我不是一个不活泼开朗的人","age": 21
}
//增量修改是只修改指定id匹配的文档中的部分字段。
POST /my_index/_doc/1
{"doc": {"self-introduction": "我是一个活泼开朗的人",}
}
  • 删除文档

DELETE /my_index/_doc/1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/301062.html

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

相关文章

JMeter+Ant+Jenkins构建接口报告(无人驾驶版)

展示结果: uc浏览器打开测试报告,绿色显示脚本结果 搭建操作步骤如下 1.jemter写好脚本 2.下载并配置ant环境变量:加上activation.jar、commons-lang3-3.8.1.jar、mail.jar 这3个包 mail.jar需要引用到jmeter 3.下载安装Jenkins 并进行构建…

第五、六章

函数 三要素 (1)是组织好的 (2)可重复使用的 (3)实现特定功能的代码段 定义格式 def 函数名(传入参数):函数体return 返回值 注意: (1)参数不需要&…

chrome 浏览器 有自带的自动字幕功能,支持英文,控制您的音乐、视频等媒体内容

chrome 浏览器 有自带的自动字幕功能,支持英文,控制您的音乐、视频等媒体内容

大模型新漏洞!Anthropic警告:新式“多轮越狱”攻破AI防线,或祸起长文本

如何让一个AI回答一个它本不应该作答的问题? 有很多这种所谓的“越狱”技术,而Anthropic的研究人员最近发现了一种新方法:如果首先用几十个危害性较小的问题对大型语言模型(LLM)进行预热,就能诱使其告诉你…

827. 最大人工岛

827. 最大人工岛 原题链接:完成情况:解题思路:参考代码:错误经验吸取 原题链接: 827. 最大人工岛 https://leetcode.cn/problems/making-a-large-island/description/ 完成情况: 解题思路: 这…

fastlio2 保存每帧的点云和每帧的里程计为单独的文件做后端回环优化和手动回环优化

为了 提供数据做后端回环优化和手动回环优化,需要保存每帧的点云和每帧的里程计为单独的文件,并且需要保存的名字为ros时间戳。 效果很好,比我自己写的手动回环模块好用 // This is an advanced implementation of the algorithm described in the // following paper: /…

Java | Leetcode Java题解之第13题罗马数字转整数

题目&#xff1a; 题解&#xff1a; class Solution {Map<Character, Integer> symbolValues new HashMap<Character, Integer>() {{put(I, 1);put(V, 5);put(X, 10);put(L, 50);put(C, 100);put(D, 500);put(M, 1000);}};public int romanToInt(String s) {int …

Godot插值、贝塞尔曲线和Astar寻路

一、插值 线性插值是采用一次多项式上进行的插值计算&#xff0c;任意给定两个值A和B&#xff0c;那么在A和B之间的任意值可以定义为&#xff1a;P(t) A * (1 - t) B * t&#xff0c;0 < t < 1。 数学中用于线性拟合&#xff0c;游戏应用可以做出跟随效果&#xff08;…

Rust语言入门第一篇-环境搭建

Rust语言入门第一篇 Rust官网 一&#xff0c;环境搭建 1、C开发环境配置 Rust 语言的底层是依赖于 C/C 编译器的。在安装 Rust 编译器时&#xff0c;通常会自动安装所需的 C/C 编译环境&#xff0c;以便 Rust 能够生成可执行文件或库。因此&#xff0c;在安装 Rust 之前&…

基于单片机手机屏蔽器系统仿真设计

**单片机设计介绍&#xff0c;基于单片机手机屏蔽器系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机手机屏蔽器系统的仿真设计主要涉及到手机信号屏蔽的原理、单片机控制逻辑设计、仿真软件的选择与使用以…

python(使用循环显示四种模式)

代码&#xff1a; # 模式A for i in range(1, 6):for j in range(1, 6):if i j:print(i, end"")else:print(" ", end"")print()# 模式B for i in range(1, 6):for j in range(1, 6):if i j 7:print(j, end"")else:print(" &q…

VSCODE使用VSIX安装扩展

VSCode安装扩展特别慢&#xff0c;使用命令行安装告别龟速&#xff1a; code --install-extension当然&#xff0c;我这个是在WSL 的linux上安装的&#xff0c;Windows一样的。 VSCode扩展商店网页链接&#xff1a;https://marketplace.visualstudio.com/vscode

【Java集合进阶】泛型的通配符和综合练习

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

xss.pwnfunction-Jefff

在eval中可以直接执行命令所以直接把"直接闭合在结尾再加上一个"因为后面的"没闭和会报错 ?jeffa";alert(1);" 或 ?jeffa"-alert(1)-" -是分隔符

全面解析十七种数据分析方法,具象数据分析思维

本文干货信息汇总&#xff1a;FineBI自助式BI数据分析工具下载>>https://s.fanruan.com/vfp40FineBI数据分析模板库>>https://s.fanruan.com/fnbjg 一、介绍 在当今数据驱动的商业环境中&#xff0c;数据分析已经成为了企业获取竞争优势的关键工具。无论是为了优化…

模型融合的方法

集成学习&#xff1a;通过构建并结合多个学习器来完成学习任务&#xff0c;有时也被称为多分类器系统、基于委员会的学习等。&#xff08;集成学习不是只有同质学习器的集成&#xff0c;还有异质学习器的集成&#xff09; 模型融合&#xff1a;通过多个模型共同决策提升任务的…

阿里云乱扣费故障,技术堪忧

2024年4月3日&#xff0c;距离2023年11月的故障没有多久&#xff0c;阿里云又出现乱扣费故障&#xff0c;导致账号欠费3000多&#xff0c;oss&#xff0c;块存储&#xff0c;cdn等所有后付费服务停止工作&#xff0c;不知道这个故障能算什么级别的。 凌晨1点多&#xff0c;收到…

09 flink-sql 中基于 mysql-cdc 的 select * from test_user 的具体实现

前言 这也是最近帮一个朋友看问题 遇到的一个问题 然后 引发了一下 对于 flink-sql 里面的一些 常规处理的思考, 理解 原始问题主要是 在测试库可以使用 flink-sql 可以正常同步, 但是 在生产环境 无法正常同步数据 这个问题 我们后面单独 记录一篇文章 测试用例 下载…

代码随想录算法训练营第48天|198.打家劫舍|213.打家劫舍II| 337.打家劫舍III

代码随想录算法训练营第48天|198.打家劫舍|213.打家劫舍II| 337.打家劫舍III 今天就是打家劫舍的一天&#xff0c;这个系列不算难&#xff0c;大家可以一口气拿下。 198.打家劫舍 视频讲解&#xff1a;https://www.bilibili.com/video/BV1Te411N7SX https://programmercarl.c…

系统架构评估_2.SAAM方法

SAAM&#xff08;Scenarios-based Architecture Analysis Method&#xff09;是卡耐基梅隆大学软件工程研究所&#xff08;SEI at CMU&#xff09;的Kazman等人于1983年提出的一种非功能质量属性的架构分析方法&#xff0c;是最早形成文档并得到广泛使用的软件架构分析方法。最…