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.pswp.cn/news/273262.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273262.shtml
英文地址,請注明出處:http://en.pswp.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"); --…

python2.面向對象.學生管理

main.py(程序主入口) #1.導入管理系統模塊 from mangerSystem import * #2.啟動管理系統 #保證是當前文件運行才啟動管理系統:if -- 創建對象并調用run()方法 if __name__"__main__": student_managerStudentManager() student_manager.run() student…

紙板怎么切割光滑_激光切割機大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; …

loadrunner11錄制不成功解決方法(收集)

問題一:loadrunner11錄制時events為0的解決辦法 剛安裝好的11.0,系統環境是:WINXPIE8LR11 OR WIN7IE11LR11 1、ie去掉工具—internet選項中->高級—>去掉“啟用第三方瀏覽器擴展”,重啟ie后發現還不行,繼續&…

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…

支持與不支持in-place操作的OpenCV函數匯總

支持In-Place操作cvSmoothCV_BLUR 、CV_GAUSSIAN支持,另三種不支持 cvDilate cvMorphologyEx對于“禮帽”和“黑帽”操作,in-place情況下,臨時圖像是必須的 cvFilter2D cvAdaptiveThreshold 備注在OpenCV官方文檔中,函數中最后一…

微信接口請求次數_接口簽名驗證常用方案

前面的文章說了接口數據如何獲取,今天就來聊聊接口數據的安全問題。說到接口加密驗證,通常都稱作“簽名”,類似于名人的個性簽名,讓其它人無法模仿。比如說請求接口刪除自己寫的文章,又或者請求接口查詢自己的帳單明細…

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),所以出于這…

mysql010函數使用.單行函數.多行函數

-- 函數使用 -- 1.單行函數 執行QSL語句時候 分別產生了一條記錄影響的是多行。 -- 2.多行函數 執行QSL語句時候 只產生一條結果 -- 自己理解:多行函數,就是需要多條數據才能執行的結果。 -- max() min() sum() avg() count() SELECT ENAME,LOWER(E…

JS在線壓縮

http://dean.edwards.name/packer/轉載于:https://www.cnblogs.com/fery/p/4531804.html

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…

poj1969---找規律

題意&#xff1a;按照s型分別給數編號&#xff0c;給 #include <stdio.h> #include <stdlib.h>int main() {int n;while(scanf("%d",&n) ! EOF){int s0,k1;while(1){sk;//統計個數&#xff0c;當前幾斜線和大于了規定的序號&#xff0c;說明此時該數…