ElasticSearch

一. 基本概述

二. 方法

1. query方法(org.elasticsearch.index.query包)
  • MatchQueryBuilder matchQuery(String name, Object text) {}:會將搜索詞分詞,再與目標(biāo)查詢字段進行匹配,若分詞中的任意一個詞與目標(biāo)字段匹配上,則可查詢到。
  • TermQueryBuilder termQuery(String name, int value) {}:不會對搜索詞進行分詞處理,而是作為一個整體與目標(biāo)字段進行匹配,若完全匹配,則可查詢到。

三. 分詞

四. 自動補全

五. 調(diào)優(yōu)

代碼層面:

  1. query不必要全是must,must是必須滿足的條件,如果不是必須,可以用should
  2. 只返回需要的數(shù)據(jù)集,用public SearchRequestBuilder setFetchSource(@Nullable String include, @Nullable String exclude) {}

索引與配置層面:

  1. 索引讀寫優(yōu)化:在settings中"index.store.type":"niofs",讀寫索引使用Nio file system
  2. 當(dāng)索引結(jié)構(gòu)比較穩(wěn)定時,可以使用"dynamic":"strict"以嚴(yán)格模式來動態(tài)索引
  3. es6.0版本之前"_all":{"enabled":false}防止所有的字段都被索引起來做分詞,可以節(jié)省很多空間,提高性能
  4. 在settings中"index.query.default_field":"title" : 默認(rèn)query_string等是走的all,這樣配置可以設(shè)置默認(rèn)查詢的索引
  5. 分片大小最好控制在10~20G,性能最佳
  6. 網(wǎng)絡(luò)波動等造成的分片掛掉后一段時間 , 自動恢復(fù)機制開啟時 , 數(shù)據(jù)太多可能會影響集群不穩(wěn)定 , 可以設(shè)置延遲恢復(fù)策略"index.unassigned.node_left.delayed_timeout": "5m"延遲五分鐘
  7. es刷新索引并不是真正實時刷新 , 而是有默認(rèn)間隔為1s的刷新 , 可以根據(jù)實際情況更改putip:9200/_cluster/settings"index.refresh_interval":"30s"(5.x版本以上不適用 , 有新格式代替)
  8. 節(jié)點之間的哨兵機制可能會被jvm的gc中stop the world而判斷錯誤 , 啟動恢復(fù)策略 , 可以適當(dāng)調(diào)增ping的超時時間與重試次數(shù) , 在配置文件中修改
#節(jié)點間存活檢測時間
discovery.zen.fd.ping_interval=10s
#存活超時時間
discovery.zen.fd.ping_timeout=60s
#存活超時重試次數(shù)
discovery.zen.fd.ping_retries=5
  1. master只協(xié)調(diào)不存數(shù)據(jù)node.master=true,node.data=false
  2. jvm設(shè)置不要超過總內(nèi)存50% , 也不要超過32G , 此外設(shè)置的越大越好
  3. 硬件上 , 使用ssd
  4. 一次性寫入大量數(shù)據(jù) , 不要用index的api , 要用bulk , 異步接口提升qps

六. 技術(shù)棧

  1. logstash
  2. kibana
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容