手记

ElasticSearch入门实战1

  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


0人推荐
随时随地看视频
慕课网APP