ES的應(yīng)用場(chǎng)景
ES是一個(gè)開源的分布式搜索和分析引擎,提供了近實(shí)時(shí)(1秒內(nèi))搜索和聚合兩大功能。 廣泛應(yīng)用于搜索,日志管理,安全分析,指標(biāo)分析,業(yè)務(wù)分析,應(yīng)用性能監(jiān)控等領(lǐng)域。相比于傳統(tǒng)數(shù)據(jù)庫,它提供了模糊查詢和搜索條件的算分等關(guān)系型數(shù)據(jù)庫不擅長的,但在事務(wù)性方面,它不如傳統(tǒng)數(shù)據(jù)庫。
前面已經(jīng)安裝好了ES,那么在使用ES之前先了解一下它的基本概念。
名詞 | 解釋 |
---|---|
Index(索引) | 索引就像Mysql中的數(shù)據(jù)庫,后面創(chuàng)建的文檔數(shù)據(jù)都屬于某個(gè)索引,盡量把一些有相似特性文檔放到一個(gè)文檔,這里又有點(diǎn)像傳統(tǒng)數(shù)據(jù)庫的表。 |
document(文檔) | 文檔是建立索引的基本信息單元。像Mysql中的一行數(shù)據(jù),一個(gè)文檔用JSON表示,可以有不同的字段。 |
Filed(字段) | 像Mysql中的列,可以直接建立索引進(jìn)行查詢。 |
node(節(jié)點(diǎn)) | 一個(gè)ES實(shí)例叫一節(jié)點(diǎn),一般一臺(tái)機(jī)器上運(yùn)行一個(gè)實(shí)例。 |
cluster(集群) | 多個(gè)節(jié)點(diǎn)組成一個(gè)集群,集群需要指定唯一名字 |
shard(分片) | 一個(gè)索引可以分成多個(gè)分片存到不同的節(jié)點(diǎn)里面,一般創(chuàng)建索引時(shí)指定分片數(shù)量。 |
replicas(副本) | 防止機(jī)器掛掉造成機(jī)服務(wù)的不可用,每個(gè)分片會(huì)有一個(gè)或多個(gè)復(fù)制品叫作副本。 |
下面的命令在kibana的開發(fā)工具上執(zhí)行。
1.索引API
//創(chuàng)建索引
PUT /users
//查看所有索引信息
GET /_cat/indices?v
//刪除索引
DELETE /users
2.創(chuàng)建文檔
//創(chuàng)建文檔
PUT /users/_doc/1
{
"name":"wsj",
"age":20
}
//返回結(jié)果
{
"_index" : "users", //索引名稱
"_type" : "_doc", //類型
"_id" : "1", //文檔id
"_version" : 1, //版本
"result" : "created",
"_shards" : {
"total" : 2, //總共2個(gè)分片
"successful" : 1, //一個(gè)執(zhí)行成功,因?yàn)橹黄鹆艘粋€(gè)節(jié)點(diǎn)
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
//同上面創(chuàng)建文檔,id自動(dòng)生成
POST /users/_doc
{
"name":"wsj2",
"age":21
}
3.查詢文檔
//查詢id為1的文檔
GET /users/_doc/1
//返回結(jié)果
{
"_index" : "users",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : { //文檔內(nèi)容
"name" : "wsj",
"age" : 20
}
}
//只查詢某些字段,用逗號(hào)隔開
GET /users/_doc/1?_source=name
//返回結(jié)果
{
"_index" : "users",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "wsj"
}
}
//當(dāng)字段多時(shí),能夠選擇包括和排除不要的字段
GET /users/_doc/1?_source_includes=age&_source_excludes=name
{
"_index" : "users",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"age" : 20
}
}
4.更新文檔
//已存在的用戶
GET /users/_doc/2
{
"_index" : "users",
"_type" : "_doc",
"_id" : "2",
"_version" : 1,
"_seq_no" : 4,
"_primary_term" : 2,
"found" : true,
"_source" : {
"name" : "wsj",
"age" : 20
}
}
//更新,可以增加字段,可以更新原來字段的值
POST users/_update/2
{
"doc" : {
"name" : "wsj3",
"age":23,
"gender":"male"
}
}
//再查詢
GET /users/_doc/2
{
"_index" : "users",
"_type" : "_doc",
"_id" : "2",
"_version" : 2,
"_seq_no" : 5,
"_primary_term" : 2,
"found" : true,
"_source" : {
"name" : "wsj3",
"age" : 23,
"gender" : "male"
}
}
5.刪除文檔
DELETE /users/_doc/1