es安装教程:https://blog.csdn.net/qq_33743572/article/details/108175092
注:测试环境:CentOS Linux release 7.6.1810 (Core)
jdk:1.8
elasticsearch:6.8.2 单节点
ES文档命名
es的文档命名格式:
PUT /{index}/{type}/{id}{
"field": "value",
...}
index:索引名。因共同的特性被分组到一起的文档集合,例如把所有产品存储在索引 /products 下,把所有交易信息存储在索引 /sales 下。
type:类型。它允许您在索引中对数据进行逻辑分区
id:ID 是一个字符串,当它和 _index 以及 _type 组合就可以唯一确定 Elasticsearch 中的一个文档。 当你创建一个新的文档,要么提供自己的 _id ,要么让 Elasticsearch 帮你生成。
es与关系型数据库术语对照:
关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns)
Elasticsearch ⇒ 索引(Index) ⇒ 类型(type) ⇒ 文档(Docments) ⇒ 字段(Fields)
添加索引
#结构化创建索引,规范化/test 索引的分配和副本数量,以及字段类型
PUT /test
{
"settings": {
#数据分片数,默认为5,有时候设置为3
"number_of_shards": 1,
#数据备份数,如果只有一台机器,设置为0
"number_of_replicas": 0
},
"mappings": {
"_doc":{
"properties":{
"name":{"type":"text"},
"age":{"type":"integer"}
}
}
}
}
# 查询/test下的索引
GET /test/_search
# 添加索引
PUT /test/_doc/1
{
"name":"李雷",
"age":12,
"gender":"男"
}
点击右箭头执行
已经规范了在/test/_doc下的name和age的数据类型,如果换其他类型会报错,但是可以添加除规定的字段以外的字段。
ES支持的基础类型包括:
Text:字符串类型,可以被分析
Keyword:字符串类型,不能被分析,只可以精确匹配
Date:日期类型,通常配合format使用,例:{"type":"date","format":"yyyy-MM-dd"}
Long
integer
short
Boolean
Array:数组类型
Object:一般是json
Ip:ip地址
geo_point:地理位置 {
"lat":
"lon":
}
查询索引
测试查询用到的脚本:
#结构化创建索引
PUT /test
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
"_doc":{
"properties":{
"name":{"type":"text"}
"age":{"type":"integer"}
}
}
}
}
GET /test/_doc/1
GET /test/_search
{
"query":{
"match":{"name":"李雷"}
},
"sort":[
{
"age":{"order":"asc"}
}
],
"aggs": {
"my_agg_name": {
"terms": {
"field": "age"
}
}
}
}
GET /test/_search
{
"query":{
"match":{"name":"李雷"}
},
"sort":[
{
"age":{"order":"asc"}
}
],
"aggs": {
"my_agg_name": {
"min": {
"field": "age"
}
}
}
}
PUT /test/_doc/1
{
"name":"李雷",
"age":11,
"gender":"男"
}
PUT /test/_doc/2
{
"name":"韩梅",
"age":11,
"gender":"女"
}
PUT /test/_doc/3
{
"name":"李小雷",
"age":10,
"gender":"男"
}
1.主键查询
2.查询 All
查询出了新建的韩梅
3.分页查询
从0开始查1个
注意:分页查询是在内存中完成,所以不能查太多的分页
4.条件查询
看到条件查询能同时把新添加的“李小雷”也查询出来了。
5.带排序查询
从查询结果看到李雷按年龄从小到大排序
6.聚合查询
按age聚合查询后,从结果看到查询出 age 为 10 和 11 的文档个数都是1一个,并且已经按age从小到大排序
除了terms之外还有sum、avg、stat、min、max、value_count等等还有很多聚合函数可以使用,例:
my_agg_name 是名称可以自己起。从右边结果看到使用min函数查询出最小age。
修改索引
PUT /test/_doc/1
{
"name":"李雷",
"age":20,
"gender":"男"
}
POST /test/_doc/1
{
"name":"李雷",
"age":30,
"gender":"男"
}
GET /test/_doc/1
使用PUT和POST都可以添加和修改索引,不同的是:
1.更新:PUT会将新的json值完全替换掉旧的;而POST方式只会更新相同字段的值,其他数据不会改变,新提交的字段若不存在则增加。
2.PUT和DELETE操作是幂等的。所谓幂等是指不管进行多少次操作,结果都一样。比如用PUT修改一篇文章,然后在做同样的操作,每次操作后的结果并没有什么不同,DELETE也是一样。
3.POST操作不是幂等的,比如常见的POST重复加载问题:当我们多次发出同样的POST请求后,其结果是创建了若干的资源。
4.创建操作可以使用POST,也可以使用PUT,区别就在于POST是作用在一个集合资源(/articles)之上的,而PUT操作是作用在一个具体资源之上的(/articles/123)。
删除索引
根据主键删除:
DELETE /test/_doc/1
删除索引下所有文档:
DELETE /test/
删除后所有文档都找不到