ElasticSearch

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

段合并

段合并在進行索引和搜索時會自動進行

  1. 當索引的時候,刷新(refresh)操作會創(chuàng)建新的段并將段打開以供搜索使用。
  2. 合并進程選擇一小部分大小相似的段,并且在后臺將它們合并到更大的段中。這并不會中斷索引和搜索。
  3. 合并完成時的活動:
    1. 新的段被刷新(flush)到了磁盤。 寫入一個包含新段且排除舊的和較小的段的新提交點
    2. 新的段被打開用來搜索。
    3. 老的段被刪除。

Elasticsearch的樂觀鎖

Elasticsearch的多線程異步并發(fā)修改是基于自己的_version版本號進行樂觀鎖并發(fā)控制的

  • 比較版本號,版本號相同修改可以成功
  • 不相等就再次讀取新的數(shù)據(jù)修改
  • 刪除操作也會對這條數(shù)據(jù)的版本號加1
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容