Elasticsearch 实战
1、document数据格式
面向文档的搜索分析引擎
1)应用系统的数据结构都是面向对象的,复杂的。
2)对象存储在数据库中,只能拆解开来,变为扁平的多张表,每次查询的时候还得还原回对象格式,相当麻烦。
3)ES是面向文档的,文档中存储的数据结构与面向对象的数据结构是一致的,基于这种文档的数据结构,ES可以提供复杂的索引,全文索引,分析聚合等功能。
4)ES的document是用json数据格式表达的。
public class Employee{
private String email;
private String firstName;
private String lastName;
private EmployeeInfo info;
private Date joinDate;
}
public class EmployeeInfo{
private String bio;//性格
private Integer age;//年龄
private String[] interests;//兴趣
}
在数据库中两张表,employee表和empolyeeInfo表。
{
"email":"z[email protected]",
"first_name":"san",
"last_name":"zhang",
"info":{
"bio":"curious and modest"
"age":"20",
"interests":["bike","climb"]
},
"join_date":"2018/10/06"
}
这时候我们就明白了document数据格式了。
2、电商网站商品管理案例背景介绍
有一个电商网站,需要为其基于ES构建一个后台系统提供如下功能:
1)对商品信息进行CRUD(增删改查)操作。
2)执行简单的结构化查询。
3)可以执行简单的全文检索。以及复杂的短句检索。
4)对于全文检索的结果进行高亮显示。
5)对数据进行简单的聚合分析。
3、简单的集群管理
1)快速检查集群的健康情况
GET /_cat/health?v
如何快速了解集群的监控状态?
(green、yellow、red)
green:每个索引的primary shard 和 replica shard 都是active状态。
yellow:每个索引的primary shard 都是active状态,但是部分replica shard不是active状态,处于不可用状态 。
red:不是所有索引的primary shard 都是active状态,部分索引数据丢失。
2)快速查看集群中有哪些索引
GET /_cat/indices?v
3)简单的索引操作
创建索引:PUT /test_index?pretty
效果
删除索引:DELETE /test_index?pretty
效果
4、商品的CURD(增删改查)操作
1)新增商品,新增文档,建立索引
PUT /index/type/id
{
"json数据"
}
实例
创建三条数据
PUT /ecommerce/product/1
{
"name":"gaolujieyagao",
"desc":"gaoxiaomeibai",
"price":"30",
"producer":"gaolujie producer",
"tags":["meibai","fangzhu"]
}
PUT /ecommerce/product/2
{
"name":"jiajieshiyagao",
"desc":"yaoxiaofangzhu",
"price":"25",
"producer":"jiajieshi producer",
"tags":["fangzhu"]
}
PUT /ecommerce/product/3
{
"name":"zhonghuayagao",
"desc":"caobenzhiwu",
"price":"40",
"producer":"zhonghua producer",
"tags":["qingxiang"]
}
ES会自动建立index和type,不需要提前创建,而且ES默认会对document每个filed都建立倒排索引,让其可以被搜索。
2)查询商品:检索文档
Get /ecommerce/product/1
效果
3.1)修改商品:替换文档
PUT /ecommerce/product/1
{
"name":"jiaqiangban gaolujieyagao",
"desc":"gaoxiaomeibai",
"price":"30",
"producer":"gaolujie producer",
"tags":["meibai","fangzhu"]
}
效果
有不足之处,得全部属性重写。
3.2)修改商品:更新文档
POST /ecommerce/product/1/_update
{
"doc":{
"name":"zengqingban gaolujieyagao"
}
}
效果
4)删除商品:删除文档
DELETE /ecommerce/product/1
效果
删除成功