es是什么
es多被用于搜索聚合分析引擎
是分布式的可以高性能查詢的引擎
es應用場景
為什么不用MYSQL而用es
es將數(shù)據(jù)存在內(nèi)存中且可以分布式的存儲數(shù)據(jù)
商品上架
商品在es中的保存
1.在es中建立索引
spu sku
spu sku保存在一起防止分布查詢
為了防止對象數(shù)組扁平化,商品屬性字段類型設為nested類型。
es數(shù)組的扁平化處理:es存儲對象數(shù)組時,它會將數(shù)組扁平化,也就是說將對象數(shù)組的每個屬性抽取出來,作為一個數(shù)組。因此會出現(xiàn)查詢紊亂的問題。
2.將商品數(shù)據(jù)發(fā)送給es進行保存
使用bulk對商品數(shù)據(jù)進行批量保存實現(xiàn)上架
商品檢索DSL語句
1.全文匹配關鍵字
使用bool查詢 布爾查詢是一個或多個查詢子句的組合
must:必須匹配每個子查詢,類似“與”。一般搭配match匹配,查text類型。
使用match語句
不用term term不進行分詞
2.通過分類進行檢索
使用filter對分類進行匹配
3.復雜查詢 排序(價格排序)、過濾(區(qū)間)
區(qū)間檢索 使用range 排序使用sort
使用search對商品進行查詢
es相關面試題
1. 倒排索引流程:
分詞:將每一個文檔的數(shù)據(jù)利用算法分詞,得到一個個詞條;
映射關系表:創(chuàng)建分詞和文檔id的映射關系表;
詞條–>id–>文檔:搜索詞條時,根據(jù)映射關系表找到它對應的所有文檔id,然后根據(jù)文檔id正向索引查到文檔。
2. 怎么保證MySQL和ES一致性
使用消息隊列:
使用消息隊列(如Kafka、RabbitMQ)作為數(shù)據(jù)更新的中間件。
當對MySQL進行寫操作時,將相同的數(shù)據(jù)變更事件發(fā)送到消息隊列。然后,使用一個消費者服務從隊列讀取這些事件并更新到ES。
3.ElasticSearch為什么是近實時不是實時?如何保證實時?
當數(shù)據(jù)添加到索引后并不能馬上被查詢到,等到索引刷新后才會被查詢到。 refresh_interval 配置的刷新間隔。默認是1s。
解決辦法:
修改刷新間隔
設置刷新策略為立即刷新
說說ES集群的節(jié)點和分片
一個集群里有多個節(jié)點,每個節(jié)點都是一個es實例, 每個節(jié)點保存了自己的分片和一個其他節(jié)點備份的分片。
集群(cluster):一組擁有共同的 集群名 的 節(jié)點。
節(jié)點(node) :集群中的一個 Elasticearch 實例
分片(shard):索引可以被拆分為不同的部分進行存儲,稱為分片。在每次讀寫數(shù)據(jù)時,會根據(jù)文檔ID%分片數(shù)量,得出具體訪問分片的序號。在集群環(huán)境下,一個索引的不同分片可以拆分到不同的節(jié)點中。
解決問題:數(shù)據(jù)量太大,單點存儲量有限、高可用的問題。
主分片(Primary shard):相對于副本分片的定義。主分片和副本分片會自動分配在各節(jié)點,
副本分片(Replica shard):每個主分片可以有一個或者多個副本,數(shù)據(jù)和主分片一樣。主分片副本數(shù) <= 節(jié)點數(shù) - 1 。例如3個節(jié)點,則主分片有3個,每個主分片最多有2個副本,副本數(shù)可以動態(tài)擴展。
集群職責劃分:實際場景,每個節(jié)點要細化角色,當然只搭建備選主節(jié)點也是可以的,默認情況下,集群中的任何一個節(jié)點都同時具備上述四種角色。
候選主節(jié)點(master eligible):管理集群狀態(tài),處理索引庫增刪請求。
數(shù)據(jù)節(jié)點(data):對記錄的增刪改查。
接待節(jié)點(ingest):數(shù)據(jù)存儲前的預處理。
協(xié)作節(jié)點(coordinating):將請求路由其他節(jié)點,合并處理結果并返回。這樣用戶訪問任何一個節(jié)點都能請求路由到數(shù)據(jù)實際存儲分片所在節(jié)點。
集群腦裂問題以及為什么會出現(xiàn)
腦裂:master故障,集群選舉出新master后舊master又恢復了,導致集群出現(xiàn)了兩個master。
腦裂原因:文章來源:http://www.zghlxwxcb.cn/news/detail-799010.html
網(wǎng)絡延遲導致誤判:集群間的網(wǎng)絡延遲導致一些節(jié)點訪問不到master, 認為master 掛掉了從而選舉出新的master,并對master上的分片和副本標紅,分配新的主分片
主節(jié)點負載過高導致誤判:主節(jié)點的角色既為master又為data,訪問量較大時可能會導致ES停止響應造成大面積延遲,此時其他節(jié)點得不到主節(jié)點的響應認為主節(jié)點掛掉了,會重新選取主節(jié)點
主節(jié)點故障。
解決:
1.調(diào)大超時時間
2.將master與數(shù)據(jù)分離
6.什么是mapper
mapper包含字段名稱、類型、是否創(chuàng)建索引等字段基本信息
7 全文檢索
搜索時明確范圍的搜索
檢索是指檢索相關性的內(nèi)容
直接用like檢索會掃描表 很慢
8.為什么不用B+樹索引做全文檢索
樹的每一層查找都涉及磁盤IO比較慢
2.用%like% 不符合最左匹配原則 會失效文章來源地址http://www.zghlxwxcb.cn/news/detail-799010.html
到了這里,關于谷粒商城項目|es的應用場景及常見問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!