基礎(chǔ)概念:
一:集群和節(jié)點(diǎn)
一個(gè)節(jié)點(diǎn)只能是集群的一部分洒敏。所有的節(jié)點(diǎn)都是通過集群的名字來加入到集群的。
每個(gè)節(jié)點(diǎn)都有自己的名字:master /slave1/slave2
二:基礎(chǔ)概念
索引:含有相同屬性的文檔集合,相當(dāng)于database;
類型:索引可以定義一個(gè)或多個(gè)類型,文檔必須屬于一個(gè)類型,相當(dāng)于table
文檔:文檔是可以被索引的基本數(shù)據(jù)單位涝缝,相當(dāng)于record(一條記錄)
- 和索引相關(guān)的有“分片”和“備份”
ES索引默認(rèn)5個(gè)分片,分片指定后不可以修改譬重,備份數(shù)可以修改拒逮。
為什么要有分片和備份?
1害幅、假設(shè)索引數(shù)據(jù)量大消恍,造成硬盤壓力大,搜索速度出現(xiàn)瓶頸以现,將索引分為多個(gè)分片狠怨,分?jǐn)倝毫Γ制苍试S用戶進(jìn)行水平擴(kuò)展和拆分邑遏,以及分布式的操作佣赖,可以提高搜索的效率
2、主分片失敗或者出現(xiàn)問題時(shí)记盒,備份的分片可以代替工作憎蛤,提高了es的可用性,備份的分片還可以執(zhí)行搜索操作纪吮,分?jǐn)偹阉鞯膲毫?/li>
基本用法
RESTFul API
API基本格式:http://ip:port/索引/類型/文檔id
常用http動(dòng)詞:GET/POST/PUT/DELETE
- DSL 搜索
DSL (Domain Specific Language)是 E5 提出的基于 json 的搜素方式俩檬,在搜素時(shí)傳入特定的 on 格式的數(shù)據(jù)來完成不同的搜索需求。
DSL 比URI 搜索方式功能強(qiáng)大碾盟,在項(xiàng)目中建議使用 DSL 方式來完成.
一.創(chuàng)建索引
創(chuàng)建索引方式:非結(jié)構(gòu)化創(chuàng)建 和結(jié)構(gòu)化創(chuàng)建
索引的屬性:粗框框就是分片棚辽,細(xì)框框是分片的備份
非結(jié)構(gòu)化創(chuàng)建:
head插件里索引-新建索引:
因?yàn)楸镜貨]有啟動(dòng)集群,所以分片的備份是無效的狀態(tài)冰肴,可以看到圖中的灰色框
結(jié)構(gòu)化創(chuàng)建:
創(chuàng)建索引成功后屈藐,可以在索引信息中看到mapping里面有值了榔组。
二.插入 PUT
PUT /megacorp/employee/2
{
"first_name" : "cici",
"last_name" : "xiao",
"age" : 24,
"about" : "I love to running",
"interests": [ "coding", "music" ]
}
三.修改:直接修改文檔和腳本修改文檔 POST
直接修改文檔:
腳本修改文檔:
將參數(shù)放到外面注入數(shù)據(jù):
{
"script" : {
"lang" : "painless",
"inline" : "ctx._source.age =params.age",
"params" : {
"age":100
}
}
}
四.刪除 DELETE
- 刪除數(shù)據(jù)
在postman中,delete方式
127.0.0.1:9200/megacorp/employee/2_update
刪除id=2_update的數(shù)據(jù)
- 刪除索引
1.直接利用插件刪除索引
2.腳本刪除索引
127.0.0.1:9200/book
成功刪除book索引
五.查詢 GET
簡單查詢
127.0.0.1:9200/megacorp/employee/3
條件查詢
127.0.0.1:9200/megacorp/employee/_search 查詢所有
127.0.0.1:9200/megacorp/employee/_search 查詢所有和指定條數(shù)
{
"query":{
"match_all":{}
},
"from":1,
"size":1
}
127.0.0.1:9200/megacorp/employee/_search 匹配條件和按照年齡排序
{
"query":{
"match":{
"first_name":"cici"
}
},
"sort":[{"age":{"order":"desc"}}
]
}
- 聚合查詢
單個(gè)分組聚合联逻;按照年齡分組
127.0.0.1:9200/megacorp/employee/_search
{
"aggs":{//aggs 為聚合查詢的格式:
"group_by_age":{
"terms":{
"field":"age"
}
}
}
}
返回的結(jié)果有數(shù)據(jù)信息和聚合結(jié)果信息(此處只截取了聚合信息):
"aggregations": {
"group_by_word_count": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 24, //年齡為24 // 有一人
"doc_count": 1
},
{
"key": 25,
"doc_count": 1
},
{
"key": 28,
"doc_count": 1
},
{
"key": 100,
"doc_count": 1
}
]
}
}
- 多個(gè)分組聚合:
{
"aggs":{
"group_by_age":{
"terms":{
"field":"age"
}
},
"group_by_about":{
"terms":{
"field":"about"
}
}
}
}
- 其他聚合查詢
對(duì)所有人的age進(jìn)行統(tǒng)計(jì)
{
"aggs":{
"grades_age":{
"stats":{// 對(duì)所有人的age進(jìn)行統(tǒng)計(jì)
"field":"age"
}
}
}
}
返回:
"aggregations": {
"grades_age": {
"count": 4,
"min": 24.0,
"max": 100.0,
"avg": 44.25,
"sum": 177.0
}
}
直接指定age的最小值:
{
"aggs":{
"grades_age":{
"min":{//直接指定age的最小值:
"field":"age"
}
}
}
}
返回:
"aggregations": {
"grades_age": {
"value": 24.0
}
}