ES介紹
ES開源 可擴展 的 分布式 全文搜索和數(shù)據(jù)分析引擎
功能
- 分布式搜索引擎
- 全文檢索
- 數(shù)據(jù)分析引擎
- 對海量數(shù)據(jù)進行近實時處理
索引庫
GET /lagou-index
# 創(chuàng)建
PUT /lagou-index
# 刪除
DELETE /lagou-index
映射
PUT /lagou-index
PUT /lagou-index/_mapping/
{
"properties": {
"name": {
"type": "text",
"analyzer": "ik_max_word"
},
"job": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
# 查看索引
GET /lagou-index/_mapping/
# 創(chuàng)建索引庫和映射
PUT /lagou-index/
{
"settings": {},
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "ik_max_word"
},
"job": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
文檔
# 指定id,不指定自動生成
POST /lagou/_doc/{id}
{
"name": "joe",
"job": "engineer"
}
# 更新指定id文檔字段,全量更新(更新所有字段,不指定的字段,更新后消失)
PUT /lagou/_doc/{id}
{
"name": "joe",
"job": "AI"
}
# 局部更新,只更新name,其他保持不變
POST /lagou/_update/{id}
{
"doc": {
"name": "joe",
}
}
# 查詢指定id
GET /lagou/_doc/{id}
#返回指定字段
GET /lagou/_doc/_source=name,job
# 查詢所有
POST /lagou/_search
{
"query":{
"match_all": {}
}
}
# 刪除
DELETE /lagou/_doc/{id}
POST /lagou/_doc/_delete_by_query
{
"query": {
"match": {
"字段名": "搜索關鍵字"
}
}
}
聚合
ES中隊數(shù)據(jù)集求最大,最小,求和,平均 稱為指標聚合
數(shù)據(jù)分組稱為 分桶,分組基礎上進行指標聚合,稱為 桶聚合
# 書的最大價格
POST /book/_search
{
"size": 0,
"aggs": {
"max_price": {
"max": {
"field": "price"
}
}
}
}
ES集群
集群(Cluster)
一個Elasticsearch集群由多個節(jié)點(Node)組成,每個集群都有一個共同的集群名稱作為標識一個Elasticsearch實例即一個Node
-
node.master:表示節(jié)點是否具有成為主節(jié)點的資格
- true代表的是有資格競選主節(jié)點
- false代表的是沒有資格競選主節(jié)點
node.data:表示節(jié)點是否存儲數(shù)據(jù)
Index寫調優(yōu)
- 副本數(shù)設置0
- 自動生成doc ID
- 合理設置mapping,對字段不分詞,不索引,減少字段內容長度
- 調整_source字段,source 字段用于存儲 doc 原始數(shù)據(jù),對于部分不需要存儲的字段,可以通過 includes excludes過濾
- 對analyzed的字段禁用norms ,Norms用于在搜索時計算doc的評分
- 調整索引的刷新間隔 ,默認1s,調整到30s
- 批處理
- Document的路由處理 ,默認的routing就是id,也可以在發(fā)送請求的時候,手動指定一個routing value
Search調優(yōu)
- 數(shù)據(jù)分組
- Filter代替Query
- ID字段定義為keyword
段合并
段合并在進行索引和搜索時會自動進行
- 當索引的時候,刷新(refresh)操作會創(chuàng)建新的段并將段打開以供搜索使用。
- 合并進程選擇一小部分大小相似的段,并且在后臺將它們合并到更大的段中。這并不會中斷索引和搜索。
- 合并完成時的活動:
- 新的段被刷新(flush)到了磁盤。 寫入一個包含新段且排除舊的和較小的段的新提交點
- 新的段被打開用來搜索。
- 老的段被刪除。
Elasticsearch的樂觀鎖
Elasticsearch的多線程異步并發(fā)修改是基于自己的_version版本號進行樂觀鎖并發(fā)控制的
- 比較版本號,版本號相同修改可以成功
- 不相等就再次讀取新的數(shù)據(jù)修改
- 刪除操作也會對這條數(shù)據(jù)的版本號加1