亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

ElasticSearch學(xué)習(xí)之Es索引Api操作

 更新時(shí)間:2023年01月31日 15:29:44   作者:程序員皮卡秋  
這篇文章主要為大家介紹了ElasticSearch學(xué)習(xí)之Es索引Api操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Es索引Api操作

在操作之前,先給大家簡(jiǎn)單的說(shuō)下索引,在es中,默認(rèn)所有數(shù)據(jù)都會(huì)建立索引,我們可以類比它是數(shù)據(jù)庫(kù)中的庫(kù),這里需要提示的是所有的索引index都必須要小寫。

創(chuàng)建索引

語(yǔ)法:

PUT /${idnexName} 

運(yùn)行:

PUT /test

輸出:

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "test"
}

這樣我們就創(chuàng)建了test索引,建完之后,我們可以到manager也就是控制臺(tái)左下角的設(shè)置圖標(biāo),點(diǎn)擊之后進(jìn)入索引管理,這樣我們就看到了剛剛建的索引,也可以查看的它的一些信息

索引別名

有時(shí)候,我們的索引非常多,管理起來(lái)就會(huì)變的麻煩,es為我們提供了aliases,也就是別名,我們可以簡(jiǎn)單的理解為對(duì)```index````做的標(biāo)記,它可以是一對(duì)一,也可以是一對(duì)多,下面就給大家演示一下,如何添加

語(yǔ)法:

POST _aliases

這里給大家舉個(gè)例子,比如年級(jí),一到六年級(jí)的索引可能是class_1,class_2,class_3,class_4,class_5,class_6,我們?cè)谄饎e名的時(shí)候,也不是亂起的,在規(guī)范中,建議使用有意義的字段使其歸為子集,比如可以統(tǒng)一叫做class

添加索引別名

一對(duì)一:

POST _aliases
{
 "actions":[
     {
         "add":{
             "index":"class_1",
             "alias":"class"
         }
     }
 ]
}

一對(duì)多,這里指的是一個(gè)別名對(duì)應(yīng)多個(gè)索引:

POST _aliases
{
 "actions":[
     {
         "add":{
             "indices":[
                 "class_1",
                 "class_2"
             ],
             "alias":"class"
         }
     }
 ]
}

多對(duì)一,這里指的多個(gè)別名對(duì)應(yīng)一個(gè)索引:

POST _aliases
{
 "actions":[
     {
         "add":{
             "index":"class",
             "aliases":[
                 "class_1",
                 "class_2"
             ]
         }
     }
 ]
}

輸出:

{
  "acknowledged" : true
}

查詢索引別名

語(yǔ)法:

GET ${indexName}/_alias

查詢class_1:

GET /class_1/_alias

輸出:

{
  "class_1" : {
    "aliases" : {
      "class" : { }
    }
  }
}

刪除索引別名

其實(shí)很簡(jiǎn)單,只需要把add改為 remove就好了,舉個(gè)例子,刪除class_1的索引別名:

  • 一對(duì)一
POST _aliases
{
 "actions":[
     {
         "remove":{
             "index":"class_1",
             "alias":"class"
         }
     }
 ]
}

我們?cè)诓樵円幌?

{
  "class_1" : {
    "aliases" : { }
  }
}

可以看到已經(jīng)被我們刪掉了

一對(duì)多

POST _aliases
{
 "actions":[
     {
         "remove":{
             "indices":[
                 "class_1",
                 "class_2"
             ],
             "alias":"class"
         }
     }
 ]
}

多對(duì)一

POST _aliases
{
 "actions":[
     {
         "remove":{
             "index":"class",
             "aliases":[
                 "class_1",
                 "class_2"
             ]
         }
     }
 ]
}

這里就不帶大家一一輸出了,自己試著運(yùn)行一下。接著我們繼續(xù)看剩下的兩個(gè)屬性~

mapping

這個(gè)mapping是什么意思呢?字面理解好像是映射,那么它映射什么?我們以mysql為例,在創(chuàng)建表的時(shí)候,會(huì)對(duì)字段進(jìn)行聲明,比如字段名稱,字段大小以及類型等等,在es中,同樣會(huì)對(duì)文檔的字段進(jìn)行聲明,包括字段類型,所否分詞,是否索引,分詞規(guī)則等多種屬性,mapping就是提供這個(gè)作用的,所以這個(gè)大家要先理解。

es中提供了動(dòng)態(tài)mapping以及靜態(tài)mapping兩種方式來(lái)聲明一個(gè)類型中文檔的字段,mapping的屬性有很多,這個(gè)后邊給大家整理好,本節(jié)先帶大家體驗(yàn)一下如何操作

settings

setting屬性用于設(shè)置當(dāng)前索引的分片數(shù),副本數(shù)等信息,常用的主要有:

index.number_of_shards:索引分片數(shù)

index.number_of_replicas:索引副本數(shù)

index.refresh_interval: refresh頻率,默認(rèn)1s。當(dāng)數(shù)據(jù)對(duì)實(shí)時(shí)刷新要求不那么高時(shí),可以適當(dāng)調(diào)大改值。當(dāng)值=-1時(shí),代表不會(huì)進(jìn)行refresh操作,但是請(qǐng)保證es的虛擬機(jī)內(nèi)存足夠大,不然會(huì)造成內(nèi)存溢出

常見(jiàn)設(shè)置:

PUT class_1
{
    "settings":{
        "index":{
            "number_of_shards":3,
            "number_of_replicas":1,
            "refresh_interval":"3s"
        }
    }
}

下面我們看下完整的索引創(chuàng)建:

PUT class_1
{
    "aliases":{
        "class":{
        }
    },
    "mappings":{
        "properties":{
            "num":{
                "type":"long"
            },
            "name":{
                "type":"text",
                "fields":{
                    "keyword":{
                        "type":"keyword",
                        "ignore_above":256
                    }
                }
            }
        }
    },
    "settings":{
        "index":{
            "refresh_interval":"3s",
            "number_of_shards":"3",
            "number_of_replicas":"1"
        }
    }
}

有幾個(gè)mapping的屬性給大家說(shuō)下:

  • fields這個(gè)屬性的意思是·多字段屬性,讓一個(gè)字段擁有多個(gè)子字段類型,使得一個(gè)字段能夠被多個(gè)不同的索引方式進(jìn)行索引,
  • keyword 不會(huì)做分詞處理。類型為 keyword 的字段只能通過(guò)精確值搜索到。類型適用于索引結(jié)構(gòu)化的字段,在Elasticsearch 5.X 之后的字段類型不再支持 string,由 text 或 keyword 取代。如果仍使用 string,會(huì)給出警告。
  • ignore_above: keyword,text類型字段都可以設(shè)置ignore_above屬性(默認(rèn)是10) ,表示最大的字段值長(zhǎng)度,*超出這個(gè)長(zhǎng)度的字段將不會(huì)被索引,但是會(huì)存儲(chǔ),ignore_above一般設(shè)置為256,設(shè)置為30000可能會(huì)出現(xiàn)BulkFailureException

查詢索引

上邊我們講的是創(chuàng)建,下面我們看下怎么查詢

查詢當(dāng)前集群全部索引

語(yǔ)法:

GET _cat/indices?v

輸出:

health status index                    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .kibana_task_manager_1   RN3mjh1qRbi7wnHnZAvD1g   1   1          2            0     77.8kb         41.8kb
green  open   .apm-agent-configuration FFRPssv0SLGYNSh5_OGPeA   1   1          0            0       566b           283b
green  open   kibana_sample_data_logs  E2e-LpmvSwm62txGvhl3Ow   1   1      14074            0     21.7mb         10.7mb
green  open   class_1                  UGsT0F5nQa-p68I7NbBWqg   3   1          0            0      1.1kb           690b
green  open   .kibana_1                2bvqPg7nSiSqKahUdJuevw   1   1         51            4    284.4kb        143.1kb

查詢單個(gè)索引

GET class_1

會(huì)輸出一段json描述信息:

{
  "class_1" : {
    "aliases" : {
      "class" : { }
    },
    "mappings" : {
      "properties" : {
        "name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "num" : {
          "type" : "long"
        }
      }
    },
    "settings" : {
      "index" : {
        "refresh_interval" : "3s",
        "number_of_shards" : "3",
        "provided_name" : "class_1",
        "creation_date" : "1670811044703",
        "number_of_replicas" : "1",
        "uuid" : "UGsT0F5nQa-p68I7NbBWqg",
        "version" : {
          "created" : "7060299"
        }
      }
    }
  }
}

有時(shí)候索引字段非常多的時(shí)候,如果我們想查詢索引的單個(gè)字段,怎么做呢?

  • 只查詢mapping
GET /class_1/_mapping

輸出:

{
  "class_1" : {
    "mappings" : {
      "properties" : {
        "name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "num" : {
          "type" : "long"
        }
      }
    }
  }
}
  • 只查詢settings
GET /class_1/_settings

輸出:

{
  "class_1" : {
    "settings" : {
      "index" : {
        "refresh_interval" : "3s",
        "number_of_shards" : "3",
        "provided_name" : "class_1",
        "creation_date" : "1670811044703",
        "number_of_replicas" : "1",
        "uuid" : "UGsT0F5nQa-p68I7NbBWqg",
        "version" : {
          "created" : "7060299"
        }
      }
    }
  }
}

修改索引

不同于mysql,你可以通過(guò)一個(gè)update把表的字段改掉,當(dāng)然當(dāng)你數(shù)據(jù)量很小的時(shí)候。在es中,es基于lucene,而lucene中的每個(gè)segment都具有不變性。因此每個(gè)Index一旦創(chuàng)建完成就不可修改。那怎么做呢?修改的另一種方式叫做數(shù)據(jù)遷移,也就是通過(guò)建立新索引,舊數(shù)據(jù)遷移到新索引的形式更新索引,在mysql中,有時(shí)在無(wú)法改變?cè)斫Y(jié)構(gòu)的時(shí)候,我們也是通過(guò)這種方式進(jìn)行的。下面通過(guò)一個(gè)例子給大家體會(huì)下:

語(yǔ)法:

POST _reindex                    
{
 "source":{
     "index":"oldIndex"
 },
 "dest":{
     "index":"newIndex"
 }
}

首先創(chuàng)建class_2

PUT class_2

將class_1轉(zhuǎn)移到class_2上:

POST _reindex                    
{
 "source":{
     "index":"class_1"
 },
 "dest":{
     "index":"class_2"
 }
}

查詢之后發(fā)現(xiàn)class_2并沒(méi)有發(fā)生什么結(jié)構(gòu)變化,在這之前我們創(chuàng)建點(diǎn)數(shù)據(jù),然后在遷移,這樣看的比較明顯一點(diǎn),向class_1插入數(shù)據(jù), 文檔操作后邊會(huì)給大家講,先簡(jiǎn)單操作一下:

GET /class_1/_doc/
{
  "name":"一年級(jí)",
  "num": 20
}

然后再執(zhí)行_reindex, 查詢class_2輸出:

{
  "class_2" : {
    "aliases" : {
      "class" : { }
    },
    "mappings" : {
      "properties" : {
        "name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "num" : {
          "type" : "long"
        }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1670811901557",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "uuid" : "PvK25pp6Tu6A0CiMpArRZQ",
        "version" : {
          "created" : "7060299"
        },
        "provided_name" : "class_2"
      }
    }
  }
}

我們發(fā)現(xiàn),class_1的屬性都被轉(zhuǎn)移到了class_2

刪除索引

語(yǔ)法:

DELETE ${indexName}

我們刪除舊索引class_1

DELETE class_1

在查詢,發(fā)現(xiàn)已經(jīng)找不到class_1

想刪除多個(gè)怎么辦呢? 方法如下:

DELETE ${indexName}, ${indexName}

結(jié)束語(yǔ)

本節(jié)主要講了索引相關(guān)的api操作,索引作為數(shù)據(jù)基石,顯得尤為重要,所以大家在學(xué)習(xí)的時(shí)候,特別是創(chuàng)建索引,一定要多去理解和練習(xí),好比我們?cè)跀?shù)據(jù)庫(kù)中建表一樣,第一步都很重要,因?yàn)檫@個(gè)直接影響到你后邊生產(chǎn)的數(shù)據(jù),所以,在下節(jié),我會(huì)給大家好好理一下mapping。

相關(guān)文章

最新評(píng)論