- document數(shù)據(jù)格式
- 電商網(wǎng)站商品管理案例背景介紹
- 簡(jiǎn)單的集群管理
- 商品的CRUD操作(document curd)
1. Document數(shù)據(jù)格式
面向文檔的搜索分析引擎
- 應(yīng)用系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)都是面向?qū)ο蟮模瑥?fù)雜的
- 對(duì)象數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中,只能拆解開(kāi)來(lái)先嬉,變成扁平的多張表,每次查詢的時(shí)候還有還原成對(duì)象格式顶猜,相當(dāng)麻煩
- ES是面向文檔的,文檔中存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu),與面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu)是一樣的,基于這種文檔數(shù)據(jù)結(jié)構(gòu)偷俭。ES可以提供復(fù)雜的索引缰盏,全文檢索涌萤,分析聚合等功能。
- ES的document用json數(shù)據(jù)格式來(lái)表示的负溪。
public class Employee {
private String email;
private String firstName;
private String lastName;
private EmployeeInfo info;
private Date joinDate;
}
private class EmployeeInfo {
private String bio;
private Integer age;
private String[] interesets;
}
EmployeeInfo info = new EmployeeInfo();
info.SetBio("youdi");
info.setAge(24);
info.setInteresets(new String[]{"dance", "code"});
Employee employee = new Employee();
employee.setEmail("@");
employee.setInfo(info);
employee對(duì)象:里面包含了Employee類自己屬性。需要保存在兩張表辐真。
使用ORM.數(shù)據(jù)庫(kù)是扁平化的,不能體現(xiàn)出面向?qū)ο蟮慕Y(jié)構(gòu)侍咱。
2.電商網(wǎng)站商品管理案例背景介紹
提供功能如下:
- 對(duì)商品信息進(jìn)行CRUD
- 執(zhí)行簡(jiǎn)單的全文檢索密幔,以及復(fù)雜的phrase檢索
- 對(duì)于全文檢索結(jié)果,可以進(jìn)行高亮顯示
- 對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單的聚合分析
3. 簡(jiǎn)單的集群管理
-
快速檢查集群的健康狀況
ES提供了一套cat api胯甩,可以查看es中各種各樣的數(shù)據(jù)
GET /_cat/health?pretty epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent 1524842572 23:22:52 elasticsearch_youdi yellow 1 1 10 10 0 0 10 0 - 50.0%
查看status
Green: 每個(gè)索引的primary shard和replica shard 都是active狀態(tài)
yellow: 每個(gè)索引的primary shard是active狀態(tài),但是部分replica shard不是active狀態(tài)偎箫,處于不可用的狀態(tài)
red: 不是所有的索引的primary shard都是active狀態(tài),部分縮影有數(shù)據(jù)丟失
為什么現(xiàn)在會(huì)處于yellow狀態(tài)眉枕?
primary shard replica shard沒(méi)有第二個(gè)節(jié)點(diǎn)
- 快速查看集群中所有索引?
GET /_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open website -NVtisruRUO1buiENwh7Vw 5 1 1 0 5.5kb 5.5kb
yellow open megacorp 3YlG1FRPTDynSETmZBDIhg 5 1 3 0 17.5kb 17.5kb
- 簡(jiǎn)單的索引操作
PUT /test_index?pretty
DELETE /test_index?pretty
商品的CURD
- 新增商品
PUT /index/type/id
PUT /products/goods/1
{
"name": "test",
"desc": "hello world",
"price": 11.0,
"producer": "hello",
"tags": ["youdi", "haha"]
}
{
"_index": "products",
"_type": "goods",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
- 查詢商品
GET /products/goods/1
{
"_index": "products",
"_type": "goods",
"_id": "1",
"_version": 1,
"found": true,
"_source": {
"name": "test",
"desc": "hello world",
"price": 11,
"producer": "hello",
"tags": [
"youdi",
"haha"
]
}
}
- 更新操作
替換方式: 必須提交所有的信息
PUT /products/goods/1
{
"name": "test3",
"desc": "hello world",
"price": 11.5,
"producer": "hello",
"tags": ["youdi", "haha"]
}
{
"_index": "products",
"_type": "goods",
"_id": "1",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 1,
"_primary_term": 1
}
PUT /products/goods/1
{
"name": "test3"
}
GET /products/goods/1
{
"_index": "products",
"_type": "goods",
"_id": "1",
"_version": 3,
"found": true,
"_source": {
"name": "test3"
}
}
POST products/goods/1/_update
{
"doc": {
"name": "test6"
}
}
{
"_index": "products",
"_type": "goods",
"_id": "1",
"_version": 5,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 4,
"_primary_term": 1
}
- 刪除文檔
DELETE /products/goods/1
{
"_index": "products",
"_type": "goods",
"_id": "1",
"_version": 6,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 5,
"_primary_term": 1
}
{
"_index": "products",
"_type": "goods",
"_id": "1",
"found": false
}
商品的搜索方式
- query string search
- Query DSL
- query filter
- Full-text search
1. query string search
搜索全部商品
GET /products/goods/_search
{
"took": 104, //耗時(shí)
"timed_out": false, //是否超時(shí)
"_shards": { //_shards
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1, // 查詢結(jié)果的數(shù)量 1條數(shù)據(jù)
"max_score": 1, //ES對(duì)相關(guān)度的匹配分?jǐn)?shù)
"hits": [ //包含了搜索的詳細(xì)數(shù)據(jù)
{
"_index": "products",
"_type": "goods",
"_id": "2",
"_score": 1,
"_source": {
"name": "tes2",
"desc": "hello world",
"price": 14,
"producer": "hello",
"tags": [
"youdi",
"haha"
]
}
}
]
}
}
{
"took": 8,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 1,
"hits": [
{
"_index": "products",
"_type": "goods",
"_id": "2",
"_score": 1,
"_source": {
"name": "tes2",
"desc": "hello world",
"price": 14,
"producer": "hello",
"tags": [
"youdi",
"haha"
]
}
},
{
"_index": "products",
"_type": "goods",
"_id": "1",
"_score": 1,
"_source": {
"name": "test3",
"desc": "hello world",
"price": 11.5,
"producer": "hello",
"tags": [
"youdi",
"haha"
]
}
}
]
}
}
{
"_index": "bank",
"_type": "_doc",
"_id": "25",
"_score": 1,
"_source": {
"account_number": 25,
"balance": 40540,
"firstname": "Virginia",
"lastname": "Ayala",
"age": 39,
"gender": "F",
"address": "171 Putnam Avenue",
"employer": "Filodyne",
"email": "virginiaayala@filodyne.com",
"city": "Nicholson",
"state": "PA"
}
},
- 搜索賬號(hào)名字中有ber,而且按照年齡排序
GET /bank/_doc/_search?q=firstname:Virginia&sort=age:des
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 4.882802,
"hits": [
{
"_index": "bank",
"_type": "_doc",
"_id": "25",
"_score": 4.882802,
"_source": {
"account_number": 25,
"balance": 40540,
"firstname": "Virginia",
"lastname": "Ayala",
"age": 39,
"gender": "F",
"address": "171 Putnam Avenue",
"employer": "Filodyne",
"email": "virginiaayala@filodyne.com",
"city": "Nicholson",
"state": "PA"
}
}
]
}
}
- query DSL
DSL:Domain specified Language 特定領(lǐng)域的語(yǔ)言
查詢所有的account
http request body :請(qǐng)求體塔插,可以使用json的格式構(gòu)建查詢語(yǔ)法梗摇,比較方便,可以構(gòu)建各種復(fù)雜的語(yǔ)法想许。
GET /bank/_doc/_search
{
"query": {
"match_all": {}
}
}
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1000,
"max_score": 1,
"hits": [
{
"_index": "bank",
"_type": "_doc",
"_id": "25",
"_score": 1,
"_source": {
"account_number": 25,
"balance": 40540,
"firstname": "Virginia",
"lastname": "Ayala",
"age": 39,
"gender": "F",
"address": "171 Putnam Avenue",
"employer": "Filodyne",
"email": "virginiaayala@filodyne.com",
"city": "Nicholson",
"state": "PA"
}
},
{
"_index": "bank",
"_type": "_doc",
"_id": "44",
"_score": 1,
"_source": {
"account_number": 44,
"balance": 34487,
"firstname": "Aurelia",
"lastname": "Harding",
"age": 37,
"gender": "M",
"address": "502 Baycliff Terrace",
"employer": "Orbalix",
"email": "aureliaharding@orbalix.com",
"city": "Yardville",
"state": "DE"
}
},
{
"_index": "bank",
"_type": "_doc",
"_id": "99",
"_score": 1,
"_source": {
"account_number": 99,
"balance": 47159,
"firstname": "Ratliff",
"lastname": "Heath",
"age": 39,
"gender": "F",
"address": "806 Rockwell Place",
"employer": "Zappix",
"email": "ratliffheath@zappix.com",
"city": "Shaft",
"state": "ND"
}
},
{
"_index": "bank",
"_type": "_doc",
"_id": "119",
"_score": 1,
"_source": {
"account_number": 119,
"balance": 49222,
"firstname": "Laverne",
"lastname": "Johnson",
"age": 28,
"gender": "F",
"address": "302 Howard Place",
"employer": "Senmei",
"email": "lavernejohnson@senmei.com",
"city": "Herlong",
"state": "DC"
}
},
{
"_index": "bank",
"_type": "_doc",
"_id": "126",
"_score": 1,
"_source": {
"account_number": 126,
"balance": 3607,
"firstname": "Effie",
"lastname": "Gates",
"age": 39,
"gender": "F",
"address": "620 National Drive",
"employer": "Digitalus",
"email": "effiegates@digitalus.com",
"city": "Blodgett",
"state": "MD"
}
},
{
"_index": "bank",
"_type": "_doc",
"_id": "145",
"_score": 1,
"_source": {
"account_number": 145,
"balance": 47406,
"firstname": "Rowena",
"lastname": "Wilkinson",
"age": 32,
"gender": "M",
"address": "891 Elton Street",
"employer": "Asimiline",
"email": "rowenawilkinson@asimiline.com",
"city": "Ripley",
"state": "NH"
}
},
{
"_index": "bank",
"_type": "_doc",
"_id": "183",
"_score": 1,
"_source": {
"account_number": 183,
"balance": 14223,
"firstname": "Hudson",
"lastname": "English",
"age": 26,
"gender": "F",
"address": "823 Herkimer Place",
"employer": "Xinware",
"email": "hudsonenglish@xinware.com",
"city": "Robbins",
"state": "ND"
}
},
{
"_index": "bank",
"_type": "_doc",
"_id": "190",
"_score": 1,
"_source": {
"account_number": 190,
"balance": 3150,
"firstname": "Blake",
"lastname": "Davidson",
"age": 30,
"gender": "F",
"address": "636 Diamond Street",
"employer": "Quantasis",
"email": "blakedavidson@quantasis.com",
"city": "Crumpler",
"state": "KY"
}
},
{
"_index": "bank",
"_type": "_doc",
"_id": "208",
"_score": 1,
"_source": {
"account_number": 208,
"balance": 40760,
"firstname": "Garcia",
"lastname": "Hess",
"age": 26,
"gender": "F",
"address": "810 Nostrand Avenue",
"employer": "Quiltigen",
"email": "garciahess@quiltigen.com",
"city": "Brooktrails",
"state": "GA"
}
},
{
"_index": "bank",
"_type": "_doc",
"_id": "222",
"_score": 1,
"_source": {
"account_number": 222,
"balance": 14764,
"firstname": "Rachelle",
"lastname": "Rice",
"age": 36,
"gender": "M",
"address": "333 Narrows Avenue",
"employer": "Enaut",
"email": "rachellerice@enaut.com",
"city": "Wright",
"state": "AZ"
}
}
]
}
}