继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

ElasticSearch入门实战1

慕虎7371278
关注TA
已关注
手记 1259
粉丝 203
获赞 873

webp

  1. document数据格式

  2. 电商网站商品管理案例背景介绍

  3. 简单的集群管理

  4. 商品的CRUD操作(document curd)

1. Document数据格式

面向文档的搜索分析引擎

  • 应用系统的数据结构都是面向对象的,复杂的

  • 对象数据存储到数据库中,只能拆解开来,变成扁平的多张表,每次查询的时候还有还原成对象格式,相当麻烦

  • ES是面向文档的,文档中存储的数据结构,与面向对象的数据结构是一样的,基于这种文档数据结构。ES可以提供复杂的索引,全文检索,分析聚合等功能。

  • ES的document用json数据格式来表示的。

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对象:里面包含了Employee类自己属性。需要保存在两张表。
使用ORM.数据库是扁平化的,不能体现出面向对象的结构。

2.电商网站商品管理案例背景介绍

提供功能如下:

  1. 对商品信息进行CRUD

  2. 执行简单的全文检索,以及复杂的phrase检索

  3. 对于全文检索结果,可以进行高亮显示

  4. 对数据进行简单的聚合分析

3. 简单的集群管理

  1. 快速检查集群的健康状况

    ES提供了一套cat api,可以查看es中各种各样的数据

    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: 每个索引的primary shard和replica shard 都是active状态

    yellow: 每个索引的primary shard是active状态,但是部分replica shard不是active状态,处于不可用的状态

    red: 不是所有的索引的primary shard都是active状态,部分缩影有数据丢失

为什么现在会处于yellow状态?

primary shard replica shard没有第二个节点

  1. 快速查看集群中所有索引?

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
  1. 简单的索引操作

PUT /test_index?pretty


DELETE /test_index?pretty

商品的CURD

  1. 新增商品

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
}
  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"
    ]
  }
}
  1. 更新操作

替换方式: 必须提交所有的信息
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
}
  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}

商品的搜索方式

  1. query string search

  2. Query DSL

  3. query filter

  4. Full-text search

1. query string search

搜索全部商品

GET /products/goods/_search

{  "took": 104, //耗时  "timed_out": false, //是否超时  "_shards": { //_shards 
    "total": 5,    "successful": 5,    "skipped": 0,    "failed": 0
  },  "hits": {    "total": 1, // 查询结果的数量 1条数据    "max_score": 1, //ES对相关度的匹配分数    "hits": [  //包含了搜索的详细数据
      {        "_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"
        }
      },
  1. 搜索账号名字中有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"
        }
      }
    ]
  }
}
  1. query DSL

DSL:Domain specified Language 特定领域的语言

查询所有的account

http request body :请求体,可以使用json的格式构建查询语法,比较方便,可以构建各种复杂的语法。

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"
        }
      }
    ]
  }
}



作者:若与
链接:https://www.jianshu.com/p/e59f28c68c41


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP