日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 elasticsearch 删除满足条件的语句_ELK从入门到还未精通(二)——ElasticSearch上篇 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
大家好,我是泥腿子安尼特,5個(gè)月沒(méi)在李佬都公眾號(hào)更新文章了。上一篇,大致介紹了作為工具人的我是如何基本使用這一套ELK 系統(tǒng)的。今天就講講這個(gè)最重要的E——基于Lucene的搜索引擎ElasticSearch(后面簡(jiǎn)稱ES)。最近剛搬家,沒(méi)想到隔壁住的都是一對(duì)對(duì)情侶,半夜三更令人臉紅耳赤的聲音在耳邊聽到就消散不去,然后我就改了路由器名字,提醒一下鄰居,結(jié)果當(dāng)天晚上我的燈就壞了。。。真的不能做惡人。。。雖然自己業(yè)務(wù)需求也忙,不過(guò)這都是借口,自己挖的坑,還是要自己填完。廢話不多說(shuō),跟隨我的一張充滿靈魂的圖,我們一起開始今天的內(nèi)容

一些基本名詞

名詞

解釋

備注

cluster

集群,一個(gè)ES集群可以由1個(gè)或者多個(gè)node節(jié)點(diǎn)組成

cluster是由一組包含相同的cluster.name的節(jié)點(diǎn)構(gòu)成。在不修改默認(rèn)配置的情況下,各個(gè)node節(jié)點(diǎn)會(huì)自動(dòng)組成一個(gè)叫elasticsearch的集群

node

每個(gè)集群實(shí)例中的一個(gè)節(jié)點(diǎn)

當(dāng)節(jié)點(diǎn)新加入或剔除時(shí),集群會(huì)自動(dòng)均分?jǐn)?shù)據(jù)到各個(gè)節(jié)點(diǎn)上。

index

雖然index翻譯過(guò)來(lái)是索引的意思,這里是一個(gè)指向一個(gè)或多個(gè)物理shard的邏輯命名空間

可以把數(shù)據(jù)結(jié)構(gòu)基本一致的文檔放在同一個(gè)index里

type

類型,低版本的ES可以在一個(gè)index里面多個(gè)type,目前已在ES7舍棄, 用一個(gè)_doc當(dāng)做每個(gè)index的默認(rèn)type

ES8將完全移除type

document

ES存儲(chǔ)的數(shù)據(jù)是文檔型的,一個(gè)index里面可以包含多個(gè)文檔

文檔以json格式保存

我們往ES里PUT一條數(shù)據(jù),就相當(dāng)于生成一個(gè)文檔,每個(gè)文檔有一個(gè)唯一ID(_id)

field

字段,每個(gè)document由多個(gè)字段組成

mapping

各個(gè)字段的數(shù)據(jù)類型描述

我們?cè)诓迦胍粭ldocument的時(shí)候如果不指定mapping,ES會(huì)自動(dòng)給我們生成mapping

ES支持的字段類型還是挺多,比如日期類型,數(shù)值類型,字符串等等,還支持搞附近的人geohash

shard

分片(index里的數(shù)據(jù)可以分片的形式存在多個(gè)shard里,方便橫向擴(kuò)容),每個(gè)index有1個(gè)或多個(gè)shard,如果你是多節(jié)點(diǎn)的集群的話,shard分布在不同的機(jī)器上

shard還分為replica shard(備份分片 可調(diào)整)和primary shard(主分片 不可調(diào)整)

replica

副本,可以備份數(shù)據(jù)用,多個(gè)replica還可以提高查詢的吞吐量

query dsl

ES的復(fù)雜查詢語(yǔ)句簡(jiǎn)稱

就像我們查mysql叫查詢語(yǔ)句叫sql一樣

很多ES的教程都會(huì)跟你類比index=數(shù)據(jù)庫(kù) type=表 document=一行數(shù)據(jù) field=字段 mapping=字段類型描述。其實(shí)這個(gè)不完全對(duì),你往index里面put一條數(shù)據(jù)的時(shí)候就生成了一個(gè)document,每個(gè)文檔有個(gè)唯一ID(_id),每個(gè)文檔都有一個(gè)版本號(hào),每次修改或刪除文檔時(shí),_version就會(huì)自增。PUT一個(gè)document到一個(gè)index后,ES會(huì)自動(dòng)給我們生成mapping,當(dāng)然,你也可以自定義mapping。默認(rèn)情況下,每個(gè)字段會(huì)被analyzed,就是會(huì)被自動(dòng)分詞掉,所以,有時(shí)候你存進(jìn)去的字段里面類似xxx_xx_xxxx的字符串時(shí)候,你用xxx_xx_xxxx精準(zhǔn)匹配竟然搜不到,就是因?yàn)楸蛔詣?dòng)analyzed的原因。

倒排索引&&正排索引

假如說(shuō)你去面試,你說(shuō)用過(guò)ES,面試官肯定會(huì)問(wèn)你倒排索引。那什么是倒排索引,是不是聽著很niu bi。我就借著官網(wǎng)上了例子講下:

例如,假設(shè)我們有兩個(gè)文檔的內(nèi)容是

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

PUT完這兩個(gè)之后,ES會(huì)按標(biāo)準(zhǔn)模式(大寫轉(zhuǎn)小寫,單復(fù)數(shù)按單數(shù),同義詞存一個(gè)單詞)生成索引,查詢輸入內(nèi)容也會(huì)被同樣的做標(biāo)準(zhǔn)化處理。

這時(shí)候存的索引可以簡(jiǎn)化為就像下面這樣:

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

這就把內(nèi)容分詞后,拿分詞的各個(gè)字段對(duì)應(yīng)文檔id,所以也形象的稱之為倒排索引。類比傳統(tǒng)像mysql這樣的數(shù)據(jù)庫(kù),通常的做法是按id維度建立索引,查詢想要快也是通過(guò)id查具體的內(nèi)容。而ES按分詞來(lái)建立與文檔ID的做法,大大的提升全文搜索的速度。?

當(dāng)然 倒排索引還存了單詞頻率TF(即這個(gè)詞在某個(gè)文檔中的出現(xiàn)次數(shù)),還記錄詞文檔出現(xiàn)的位置信息。所以我們每次查詢的時(shí)候,查詢結(jié)果都會(huì)返回一個(gè)_score,默認(rèn)的查詢結(jié)果按分值從高到低返回,詞在文檔中出現(xiàn)次數(shù)越多,詞越相似,分值越高,這也符合我們想要的搜索結(jié)果。

ES默認(rèn)的分詞器對(duì)于中文內(nèi)容只會(huì)單純的拆分每個(gè)中文字,沒(méi)法像英文文檔,用默認(rèn)的就能得到強(qiáng)大的效果,所以需要自行去找合適的中文分詞器。

那我們?cè)俸?jiǎn)單來(lái)講講正排索引,其實(shí)ES對(duì)于我們插入的內(nèi)容,除了會(huì)分詞生成倒排索引之外,它也會(huì)存每個(gè)字段的一些值(doc_value)。假如我們要根據(jù)查詢結(jié)果按某個(gè)字段的的數(shù)值進(jìn)行排序,前面我們講到ES的field是支持很多數(shù)據(jù)類型的,所謂的正排索引就是單存的存了每個(gè)字段的原始值,所以,假如我們要對(duì)一個(gè)字符串類型的字段做排序,那么我們要手動(dòng)把它設(shè)為not_analyzed,不然字符串類型的field是沒(méi)辦法排序的。

基本的增刪改查

ES支持RESTful API 方便讓我們執(zhí)行很多操作。ES也有批量操作的Bulk API,其實(shí)就相當(dāng)于一次性發(fā)送多個(gè)語(yǔ)句過(guò)去。讓我們?cè)谏弦黄恼碌幕A(chǔ)上,開啟ES、Kibana,然后打開Kibana的DevTools

  • 創(chuàng)建/刪除一個(gè)index

PUT?lib3DELETE?lib3/
  • 查看index的信息

GET /lib3/_settings

創(chuàng)建index的時(shí)候我們還可以手動(dòng)配置setting設(shè)置分片數(shù)量,我單機(jī)ES默認(rèn)就一個(gè)分片,一個(gè)備份

  • 插入/更新一個(gè)document

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

我們插入文檔的時(shí)候可以手動(dòng)指定文檔id (一般插入的時(shí)候都還是不指定id的),當(dāng)然如果你不指定ES也會(huì)自動(dòng)生成一個(gè),每個(gè)文檔插入后也會(huì)生成一個(gè)自增的_version(插入的時(shí)候也可以指定version,默認(rèn)的version是1到2^63-1 沒(méi)修改一次自增1)。ES就是根據(jù)_version(版本控制),采用樂(lè)觀鎖來(lái)保證文檔的更新。如果你指定了文檔id,并且這個(gè)文檔存在,那么ES就會(huì)覆蓋更新這個(gè)文檔。ES的實(shí)際上內(nèi)部的更新策略就是先刪除再插入,所以ES的更新效率并不高。李老之前在搞附近的人項(xiàng)目中提到ES也是支持geohash數(shù)據(jù)類型的,但是ES這樣的架構(gòu),更適合搞附近的店,搞附近的人其實(shí)也能搞,就是效率不是很高。

  • 按id精準(zhǔn)查詢document

GET /lib1/_doc/{_id}

我們可以在查詢的時(shí)候指定返回的字段只要在后面加上?_source=字段1,字段2 如果要按某字段(有doc_value)排序,可以在后面加上sort=字段:desc。默認(rèn)情況下查詢結(jié)果是不返回_version的,如果你需要 可以在后面帶上version=true

按field匹配

GET /lib3/_search?q=name:cxk

這時(shí)候我們發(fā)現(xiàn)查詢結(jié)果回來(lái)的字段好多,因?yàn)榛旧衔覀兪褂盟阉饕娴臅r(shí)候,我們肯定事先是不知道內(nèi)容到底在哪個(gè)document里的,不然還用搜么-,所以基本上是不可能按document id來(lái)查的。而基本上我們都要用到復(fù)雜查詢,對(duì)于一些簡(jiǎn)單的需求,我們可以簡(jiǎn)單的用一個(gè)簡(jiǎn)單的語(yǔ)法?q=字段:查詢輸入關(guān)鍵詞 再?gòu)?fù)雜一點(diǎn),我們就要手?jǐn)]更復(fù)雜的 query dsl語(yǔ)句了。

后話,本篇內(nèi)容看似很長(zhǎng),其實(shí)并沒(méi)有講透很多內(nèi)容,也只是對(duì)于ES做了一個(gè)簡(jiǎn)單的應(yīng)用介紹。比如ES里面的倒排索引的底層數(shù)據(jù)結(jié)構(gòu)到底是如何的,還有像ES的_version到底是怎么靠樂(lè)觀鎖來(lái)更新的,ES的各個(gè)node選master的算法,ES里的field支持的數(shù)據(jù)類型,以及它們?cè)趺创鎯?chǔ)的,都沒(méi)一一展開深入。不過(guò)這不重要,如果你不是專門從事搜索相關(guān)業(yè)務(wù)的技術(shù)開發(fā),每個(gè)點(diǎn)都去深究,都可以寫好幾篇文章。我可能更多的想給一些業(yè)務(wù)開發(fā),以及沒(méi)用過(guò)ES或者想嘗試一下ES的泥腿子們提供一個(gè)簡(jiǎn)單快速入門的ES的介紹,以及一些基本的使用。下一篇 我將花一整篇介紹query dsl!

話說(shuō)這次修改路由器ssid名字我發(fā)現(xiàn)原來(lái)路由器的ssid有個(gè)32位長(zhǎng)度限制,過(guò)了幾天后隔壁的果然消停了好多,順便也改了路由器的名字給我懟回來(lái)了

參考資料

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

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

總結(jié)

以上是生活随笔為你收集整理的elasticsearch 删除满足条件的语句_ELK从入门到还未精通(二)——ElasticSearch上篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。