1. 程式人生 > >elasticsearch 索引,更新,增量更新,不停機修改升級 ,簡單使用

elasticsearch 索引,更新,增量更新,不停機修改升級 ,簡單使用

elasticsearch 使用

對es瞭解的並不是太多,記錄簡單使用場景。若哪裡不對,還請大人指出

舉例: 根據商品名稱搜尋商品
  1. 建立索引 product_v1 為什麼要帶v1呢,後面方便升級
#新增索引
put product_v1?pretty

#檢視一下
get _cat/indices?v
  1. 定義map,簡單設定,只定義idname,還有updatetime
#設定map
POST product_v1/_mapping/doc
{
  "properties": {
    "name":{
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_max_word"
    },
    "id":{
        "type": "long"
    },
    "updatetime": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss"
    }
  }
}
#檢視map
GET /product_v1/_mapping/
  1. 新增別名,將product_v1設定為product,後面就可以針對別名操作。設定別名最大的好處,是後期變更map時很方便,開發時連線product即可
POST /_aliases
{
    "actions" : [
        { "add" : { "index" : "product_v1",  "alias" : "product" } }
    ]
}
  1. 新增一些索引隨便新增,日期就不寫了
PUT product/doc/1?pretty
{
 "name":"網路紅外半球攝像機"
}

PUT product/doc/2?pretty
{
 "name":"網路高清硬碟錄影機"
}

PUT product/doc/3?pretty
{
 "name":"網路紅外高清中速球機"
}
  1. 搜尋測試資料
GET  product/_search
{
    "query": {
    "match": {
      "name": "網路"
    }
  }
}

6.升級變更map, 比如name變更為productName。 新增新欄位typeName

#1.建立新索引
put product_v2?pretty

#2.設定新map
POST product_v2/_mapping/doc
{
  "properties": {
    "productName":{
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_max_word"
    },
    "typeName":{
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_max_word"
    }
    ...
    ...
  }
}
    
#3.得新新增索引到`product_v2`,
PUT product_v2/doc/1?pretty
{
 "productName":"網路紅外半球攝像機",
  ...
  ...
}

#4.設定別名指向新索引,原索引自己決定是否刪除
POST /_aliases
{
    "actions" : [
        { "add" : { "index" : "product_v2",  "alias" : "product" } }
    ]
}

#或者同時刪除掉原索引
POST /_aliases
{
    "actions" : [
        { "remove" : { "index" : "product_v1",  "alias" : "product" } },
        { "add" : { "index" : "product_v2",  "alias" : "product" } }
    ]
}
#或者單獨刪除都可以

DELETE   product_v1
    

7.升級變更map, 比如欄位型別需要變更,如給typeName新增一個keyword的型別

#1.新建索引
put product_v3?pretty
#2.設定新`map`
POST product_v3/_mapping/doc
{
  "properties": {
    "typeName":{
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_max_word",
        "fields": {
            "keyword": {
                "type": "keyword"
            }
        }
    }
    ...
    ...
  }
}

#3.使用`reindex`得做索引
post _reindex
{
  "source": {
    "index": "product"
  },
  "dest": {
    "index": "product_v2"
  }
}

#4.將別名切到新索引,同上
POST /_aliases
{
    "actions" : [
        { "add" : { "index" : "product_v2",  "alias" : "product" } }
    ]
}
...