ElasticSearch入门实战1
document数据格式 电商网站商品管理案例背景介绍 简单的集群管理 商品的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.电商网站商品管理案例背景介绍 提供功能如下: 对商品信息进行CRUD 执行简单的全文检索,以及复杂的phrase检索 对于全文检索结果,可以进行高亮显示 对数据进行简单的聚合分析 3. 简单的集群管理 快速检查集群的健康状况 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没有第二个节点 快速查看集群中所有索引? 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 简单的索引操作 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, //耗时 "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" } }, 搜索账号名字中有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 特定领域的语言 查询所有的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" } } ] } }