一. 基本概述
二. 方法
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)
代碼層面:
- query不必要全是must,must是必須滿足的條件,如果不是必須,可以用should
- 只返回需要的數(shù)據(jù)集,用
public SearchRequestBuilder setFetchSource(@Nullable String include, @Nullable String exclude) {}
索引與配置層面:
- 索引讀寫優(yōu)化:在settings中
"index.store.type":"niofs",讀寫索引使用Nio file system - 當(dāng)索引結(jié)構(gòu)比較穩(wěn)定時,可以使用
"dynamic":"strict"以嚴(yán)格模式來動態(tài)索引 - es6.0版本之前
"_all":{"enabled":false}防止所有的字段都被索引起來做分詞,可以節(jié)省很多空間,提高性能 - 在settings中
"index.query.default_field":"title": 默認(rèn)query_string等是走的all,這樣配置可以設(shè)置默認(rèn)查詢的索引 - 分片大小最好控制在10~20G,性能最佳
- 網(wǎng)絡(luò)波動等造成的分片掛掉后一段時間 , 自動恢復(fù)機制開啟時 , 數(shù)據(jù)太多可能會影響集群不穩(wěn)定 , 可以設(shè)置延遲恢復(fù)策略
"index.unassigned.node_left.delayed_timeout": "5m"延遲五分鐘 - es刷新索引并不是真正實時刷新 , 而是有默認(rèn)間隔為1s的刷新 , 可以根據(jù)實際情況更改put
ip:9200/_cluster/settings中"index.refresh_interval":"30s"(5.x版本以上不適用 , 有新格式代替) - 節(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
- master只協(xié)調(diào)不存數(shù)據(jù)
node.master=true,node.data=false - jvm設(shè)置不要超過總內(nèi)存50% , 也不要超過32G , 此外設(shè)置的越大越好
- 硬件上 , 使用ssd
- 一次性寫入大量數(shù)據(jù) , 不要用index的api , 要用bulk , 異步接口提升qps
六. 技術(shù)棧
- logstash
- kibana