elasticsearch 删除满足条件的语句_ELK从入门到还未精通(二)——ElasticSearch上篇

90f7623aae655ac0d29d22142eec6aad.png大家好,我是泥腿子安尼特,5个月没在李佬都公众号更新文章了。上一篇,大致介绍了作为工具人的我是如何基本使用这一套ELK 系统的。今天就讲讲这个最重要的E——基于Lucene的搜索引擎ElasticSearch(后面简称ES)。最近刚搬家,没想到隔壁住的都是一对对情侣,半夜三更令人脸红耳赤的声音在耳边听到就消散不去,然后我就改了路由器名字,提醒一下邻居,结果当天晚上我的灯就坏了。。。真的不能做恶人。。。虽然自己业务需求也忙,不过这都是借口,自己挖的坑,还是要自己填完。25b63986e07089a7b8e5aa7324f9adf0.png废话不多说,跟随我的一张充满灵魂的图,我们一起开始今天的内容

6f1654be3f59391dcaeae65f4db51b12.png

一些基本名词

名词

解释

备注

cluster

集群,一个ES集群可以由1个或者多个node节点组成

cluster是由一组包含相同的cluster.name的节点构成。在不修改默认配置的情况下,各个node节点会自动组成一个叫elasticsearch的集群

node

每个集群实例中的一个节点

当节点新加入或剔除时,集群会自动均分数据到各个节点上。

index

虽然index翻译过来是索引的意思,这里是一个指向一个或多个物理shard的逻辑命名空间

可以把数据结构基本一致的文档放在同一个index里

type

类型,低版本的ES可以在一个index里面多个type,目前已在ES7舍弃, 用一个_doc当做每个index的默认type

ES8将完全移除type

document

ES存储的数据是文档型的,一个index里面可以包含多个文档

文档以json格式保存

我们往ES里PUT一条数据,就相当于生成一个文档,每个文档有一个唯一ID(_id)

field

字段,每个document由多个字段组成

mapping

各个字段的数据类型描述

我们在插入一条document的时候如果不指定mapping,ES会自动给我们生成mapping

ES支持的字段类型还是挺多,比如日期类型,数值类型,字符串等等,还支持搞附近的人geohash

shard

分片(index里的数据可以分片的形式存在多个shard里,方便横向扩容),每个index有1个或多个shard,如果你是多节点的集群的话,shard分布在不同的机器上

shard还分为replica shard(备份分片 可调整)和primary shard(主分片 不可调整)

replica

副本,可以备份数据用,多个replica还可以提高查询的吞吐量

query dsl

ES的复杂查询语句简称

就像我们查mysql叫查询语句叫sql一样

很多ES的教程都会跟你类比index=数据库 type=表 document=一行数据 field=字段 mapping=字段类型描述。其实这个不完全对,你往index里面put一条数据的时候就生成了一个document,每个文档有个唯一ID(_id),每个文档都有一个版本号,每次修改或删除文档时,_version就会自增。PUT一个document到一个index后,ES会自动给我们生成mapping,当然,你也可以自定义mapping。默认情况下,每个字段会被analyzed,就是会被自动分词掉,所以,有时候你存进去的字段里面类似xxx_xx_xxxx的字符串时候,你用xxx_xx_xxxx精准匹配竟然搜不到,就是因为被自动analyzed的原因。

倒排索引&&正排索引

3868dd9a163acdc7f29ed181442f0d70.png假如说你去面试,你说用过ES,面试官肯定会问你倒排索引。那什么是倒排索引,是不是听着很niu bi。我就借着官网上了例子讲下:

例如,假设我们有两个文档的内容是

The quick brown fox jumped over the lazy dogQuick brown foxes leap over lazy dogs in summer

PUT完这两个之后,ES会按标准模式(大写转小写,单复数按单数,同义词存一个单词)生成索引,查询输入内容也会被同样的做标准化处理。

这时候存的索引可以简化为就像下面这样:

Term      Doc_1  Doc_2-------------------------brown   |   X   |  Xdog     |   X   |  Xfox     |   X   |  Xin      |       |  Xjump    |   X   |  Xlazy    |   X   |  Xover    |   X   |  Xquick   |   X   |  Xsummer  |       |  Xthe     |   X   |  X------------------------

这就把内容分词后,拿分词的各个字段对应文档id,所以也形象的称之为倒排索引。类比传统像mysql这样的数据库,通常的做法是按id维度建立索引,查询想要快也是通过id查具体的内容。而ES按分词来建立与文档ID的做法,大大的提升全文搜索的速度。 

当然 倒排索引还存了单词频率TF(即这个词在某个文档中的出现次数),还记录词文档出现的位置信息。所以我们每次查询的时候,查询结果都会返回一个_score,默认的查询结果按分值从高到低返回,词在文档中出现次数越多,词越相似,分值越高,这也符合我们想要的搜索结果。

ES默认的分词器对于中文内容只会单纯的拆分每个中文字,没法像英文文档,用默认的就能得到强大的效果,所以需要自行去找合适的中文分词器。

那我们再简单来讲讲正排索引,其实ES对于我们插入的内容,除了会分词生成倒排索引之外,它也会存每个字段的一些值(doc_value)。假如我们要根据查询结果按某个字段的的数值进行排序,前面我们讲到ES的field是支持很多数据类型的,所谓的正排索引就是单存的存了每个字段的原始值,所以,假如我们要对一个字符串类型的字段做排序,那么我们要手动把它设为not_analyzed,不然字符串类型的field是没办法排序的。

基本的增删改查

ES支持RESTful API 方便让我们执行很多操作。ES也有批量操作的Bulk API,其实就相当于一次性发送多个语句过去。让我们在上一篇文章的基础上,开启ES、Kibana,然后打开Kibana的DevTools

  • 创建/删除一个index

PUT lib3DELETE lib3/
  • 查看index的信息

GET /lib3/_settings

229eb0a8b25c56f1493f9888707047dd.png

创建index的时候我们还可以手动配置setting设置分片数量,我单机ES默认就一个分片,一个备份

  • 插入/更新一个document

POST /lib3/_doc/{_id}{"name":"cxk","age":18,"interests":["chang", "tiao", "rap", "lanqiu"]}

我们插入文档的时候可以手动指定文档id (一般插入的时候都还是不指定id的),当然如果你不指定ES也会自动生成一个,每个文档插入后也会生成一个自增的_version(插入的时候也可以指定version,默认的version是1到2^63-1 没修改一次自增1)。ES就是根据_version(版本控制),采用乐观锁来保证文档的更新。如果你指定了文档id,并且这个文档存在,那么ES就会覆盖更新这个文档。ES的实际上内部的更新策略就是先删除再插入,所以ES的更新效率并不高。李老之前在搞附近的人项目中提到ES也是支持geohash数据类型的,但是ES这样的架构,更适合搞附近的店,搞附近的人其实也能搞,就是效率不是很高。

  • 按id精准查询document

GET /lib1/_doc/{_id}

fef32eef3cedd415dab805eaefd9c45d.png

我们可以在查询的时候指定返回的字段只要在后面加上?_source=字段1,字段2 如果要按某字段(有doc_value)排序,可以在后面加上sort=字段:desc。默认情况下查询结果是不返回_version的,如果你需要 可以在后面带上version=true

按field匹配

GET /lib3/_search?q=name:cxk

72b7cff974dbbd63616e0a1664107286.png

这时候我们发现查询结果回来的字段好多,因为基本上我们使用搜索引擎的时候,我们肯定事先是不知道内容到底在哪个document里的,不然还用搜么-,所以基本上是不可能按document id来查的。而基本上我们都要用到复杂查询,对于一些简单的需求,我们可以简单的用一个简单的语法?q=字段:查询输入关键词 再复杂一点,我们就要手撸更复杂的 query dsl语句了。

后话,本篇内容看似很长,其实并没有讲透很多内容,也只是对于ES做了一个简单的应用介绍。比如ES里面的倒排索引的底层数据结构到底是如何的,还有像ES的_version到底是怎么靠乐观锁来更新的,ES的各个node选master的算法,ES里的field支持的数据类型,以及它们怎么存储的,都没一一展开深入。不过这不重要,如果你不是专门从事搜索相关业务的技术开发,每个点都去深究,都可以写好几篇文章。我可能更多的想给一些业务开发,以及没用过ES或者想尝试一下ES的泥腿子们提供一个简单快速入门的ES的介绍,以及一些基本的使用。下一篇 我将花一整篇介绍query dsl!

话说这次修改路由器ssid名字我发现原来路由器的ssid有个32位长度限制,过了几天后隔壁的果然消停了好多,顺便也改了路由器的名字给我怼回来了46390e415bfa3c210946dd514b7d8302.png

参考资料

https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

https://abcfy2.gitbooks.io/elasticsearch_the_definitive_guide/

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

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

相关文章

mysql004操作表.增删改

-- 查询表中数据 DQL 注意在mydb数据库下面 SELECT * FROM stdent; -- 新增数据 这种写法数据的循序和数据库的字段循序保持一致。 INSERT INTO stdent values (1,"张三","男",25,"2021.1.1","java","123qq.com"); --…

纸板怎么切割光滑_激光切割机大PK!光纤、CO2、YAG,你选谁?!

问:我也是钣金人,怎么加入组织?答:点标题下方蓝字“钣金家园光纤激光切割机之所以能在市场快速站稳脚跟并且逐步替代传统切割工艺,是由于其在各方面独具优势,那么他到底优秀在哪里呢?我们把CO2激…

mysql007.算数运算.别名.去重.排序

-- 创建DEPT表 CREATE TABLE DEPT( DEPTNO int(2) not null, DNAME VARCHAR(14), LOC VARCHAR(13) ); -- 查询DEPT表 SELECT * FROM DEPT; -- 修改表,添加主键 ALTER TABLE DEPT add CONSTRAINT PK_DEPT PRIMARY KEY(DEPTNO); -- 查询表结构。 desc DEPT; …

c# 蓝牙虚拟串口_蓝牙模块——基础知识介绍

1. 数据透传蓝牙模块可以通过串口(SPI、IIC)和MCU控制设备进行数据传输。蓝牙模块可以做为主机和从机。主机就是能够搜索别的蓝牙模块并主动建立连接,从机则不能主动建立连接,只能等别人连接自己。2. 低功耗低功耗蓝牙(Bluetooth Low Energy)&#xff0c…

Error: could not open `C:\Java\jre7\lib\i386\jvm.cfg

打开eclipse时出现Error: could not open C:\Program Files\Java\jre7\lib\i586\jvm.cfg’) 删除 c:\windows\system32\java, c:\windows\system32\javaw, c:\windows\system32\javaws, 如果是64位系统,还要删除 c:\windows\SysWOW64\java&am…

java项目001.双色球游戏

package Suangseq; //双色球游戏制作。 import java.awt.SystemColor; import java.util.Arrays; import java.util.Scanner; public class TextA { public static void main(String[] args) { boolean flagfalse;//定义一个布尔类型的变量。 int[] mynull;//定义一个变量 in…

华为手机30s桌面循环滑动_华为发飙了!麒麟820+双模5G,从2699元跌至2499元,超出消费者预期...

阅读本文前,请您先点击上面的“蓝色字体”,再点击“关注”,这样您就可以继续免费收到文章了。每天都会有分享,都是免费订阅,请您放心关注。注图文来源网络,侵删 …

混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集...

其调用的方法是从sqlite数据库中获取原来已经使用过的数据库连接,当时也没注意,就是准备设断点然后单步调试,结果竟然是断点无法进入方法体内,后来仔细看了一下方法体的时候发现了一个问题,就是现有的System.Data.Sqli…

mysql008where.or.in查询

-- 创建EMP表 CREATE TABLE EMP ( EMPNO int(4) PRIMARY KEY, ENAME VARCHAR(10), JOB VARCHAR(9), MGR INT(4), HIREDATE DATE, SAL DOUBLE(7,2), COMM DOUBLE(7,2), DEPTNO INT(2) ); -- where查询 语句 SELECT * from emp; SELECT * FROM DEPT; SELECT * FROM…

微信接口请求次数_接口签名验证常用方案

前面的文章说了接口数据如何获取,今天就来聊聊接口数据的安全问题。说到接口加密验证,通常都称作“签名”,类似于名人的个性签名,让其它人无法模仿。比如说请求接口删除自己写的文章,又或者请求接口查询自己的帐单明细…

mysql009模糊查询like.是否为null

-- 创建EMP表 CREATE TABLE EMP ( EMPNO int(4) PRIMARY KEY, ENAME VARCHAR(10), JOB VARCHAR(9), MGR INT(4), HIREDATE DATE, SAL DOUBLE(7,2), COMM DOUBLE(7,2), DEPTNO INT(2) ); -- where查询 语句 SELECT * from emp; -- 模糊查询 -- 搜索emp表中还有A的…

28335接两个spi设备_SPI浅析

01 SPI简介SPI,全称为Serial Peripheral interface,即串行外围设备接口。由摩托罗拉率先在产品上使用。SPI是一种高速全双工,同步(full duplex synchronous)的通信总线协议,且占用硬件端口只有4个(SO,SI, SCLK 和CSN),所以出于这…

java mongo 获取所有数据库_Spring Batch —从XML读取并写入Mongo

Java面试必备之JVMGC教程这几天闲着在优锐课的java学习必备中学习了,在本文中,了解如何使用Spring Batch通过StaxEventItemReader使用ItemReader读取XML文件并将其数据写入NoSQL。在本文中,我们将向展示如何使用Spring Batch使用StaxEventIte…

001多表查询.交叉链接cross JOIN.自然链接natural JOIN.using链接.on链接

-- 需求:查询每一个员工信息,并且显示每一个员工所在的部门名称 -- mysql中多表查询有四种,交叉链接cross JOIN,自然链接natural JOIN,using链接,on链接 -- 交叉链接cross JOIN SELECT * FROM emp; --6…

华菱重卡仪表指示说明_新一代创虎重卡登场!LNG车型将配玉柴燃气发动机

2020年10月23日,现代商用车新一代创虎重卡正式发布,此次新车不仅外观与韩国本土同步,更是首次搭载了国产玉柴动力,推出了LNG版车型。具体情况我们先抢先看看吧!外观升级 与韩国本土同步我们可以看到,相比此…

mysql002多表查询.on链接分为三种情况,左链接,右链接,全链接

-- on链接(最实用),分为三种情况,左链接,右链接,全链接 -- 左外链接,左表全部显示,如果匹配不到右表的内容使用null代替。 SELECT * FROM emp e LEFT JOIN dept d ON e.DEPTNOd.DE…

x轴z轴代表的方向图片_游戏中到底是Z轴朝上还是Y轴朝上?

本文转自我的公众号——游戏开发那些事在谈到游戏世界中的坐标轴时,我们经常会看到这样的争论。“游戏中Y轴是向上的好么?这你都不知道?”“不对,空间直角坐标系不就是Z轴向上的么?”“拜托,请搞清楚坐标系…

补发《超级迷宫》站立会议三

那天我给自己的任务是实现控件的控制,但结果明显很不理想,我仅仅加载了两个控件(即两个小人),一个是玩家,另一个是守关者,玩家控制基本实现,通过方向键进行控制;但守关者…

mysql003三表查询.三表查询.自链接查询

-- 多表查询 三表查询 -- 查询员工的编号,姓名,薪水,部门编号,部门名称,薪水等级 -- 可以先两表查询,在修改成三表查询 -- 第一行查询的内容,第二,三行查询需要的表, -- 和条件…

hook xposed 自定义类_【开始学习React Hook(1)】Hook之useState

react hook是react推出的一种特殊函数。这些函数可以让你在不创建react class的情况下依然可以使用react的一些特性(诸如目前react的钩子函数拥有的所有特性)。最常用的hook有useState, useEffect, 日常开发使用这两个就足够了。如果再懂点useReduer, us…