基础概念

索引--含有相同属性的文档集合
类型--索引可以定义一个或者多个类型,文档必须属于一个类型
文档--文档是可以被索引的基础数据单位
分片--每个索引都有多个分片,每个分片是一个Lucence索引
备份--拷贝一份分片就完成了分片的备份

基本用法

RESTFul API
API基本格式 http://ip:port/索引/类型/文档id;
常用HTTP动词 GET/PUT/POST/DELETE

创建索引

1.非结构化创建
查看索引信息mappings为空{}
2.结构化创建
利用elasticsearch-head创建

复合查询

 http://localhost:9200/
 book/novel/_mappings
 {
   "novel": {
        "properties": {
            "title": {
                "type": "text"
            }
        }
   }
 }

提交请求 post+易读+验证JSON

利用postman创建people

http://localhost:9200/people+put方式+json(Body+raw+JSON)

http://localhost:9200/people+put方式+json(Body+raw+JSON)
{
 "settings":{
 "number_of_shards":3,
 "number_of_replicas":1
 },
 "mappings":{
 "man":{
 "properties":{
 "name":{
 "type":"text"
 },
 "contury":{
 "type":"keyword"
 },
 "age":{
 "type":"integer"
 },
 "date":{
 "type":"date",
 "format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
 }
 }
 },
 "woman":{

 }
 }
}

插入

1.指定文档id插入

http://localhost:9200/people/man/1 + put方式 + json(Body+raw+JSON)
{
 "name":"action",
 "country":"China",
 "age":30,
 "date":"1989-11-17"
}

2.自动产生文档id插入

http://localhost:9200/people/man + post方法 + json(Body+raw+JSON)
{
 "name":"xingdong",
 "country":"China",
 "age":18,
 "date":"1989-10-20"
}

修改

1.直接修改

http://localhost:9200/people/man/1/_update + post方法 + json(Body+raw+JSON)
{
 "doc":{
 "name":"who is action"
 }
}

2.脚本方式修改

http://localhost:9200/people/man/1/_update + post方法 + json(Body+raw+JSON)
{
 "script":{
 "lang":"painless",
 "inline":"ctx._source.age += 10"
 }
}
//或者
{
 "script":{
 "lang":"painless",
 "inline":"ctx._source.age = params.age",
 "params":{
 "age":60
 }
 }
}

删除

1.删除文档
http://localhost:9200/people/man/1 + DELETE方法
2.删除索引
http://localhost:9200/people + DELETE方式
或者利用elasticsearch-head -> 动作 -> 删除

查询

1.简单查询
http://localhost:9200/people/man/1 + GET方法
2.条件查询
http://localhost:9200/people/_search  + POST方法

2.1查询全部

{
 "query":{
 "match_all":{}
 }
}

2.2分页

{
 "query":{
 "match_all":{}
 },
 "from":1,
 "size":1
}

2.3匹配+排序

{
 "query":{
 "match":{
 "name":"action"
 }
 },
 "sort":[
 {"age":{"order":"desc"}}
 ]
}

3.聚合查询

3.1聚合查询

{
 "aggs":{
 "group_by_age":{
 "terms":{
 "field":"age"
 }
 },
 "group_by_date":{
 "terms":{
 "field":"date"
 }
 }
 }
}

3.2总数+最小+最大+平均年龄

{
 "aggs":{
 "group_by_age":{
 "stats":{
 "field":"age"
 }
 }
 }
}
{
 "aggs":{
 "group_by_age":{
 "min":{
 "field":"age"
 }
 }
 }
}

高级查询

子条件查询 特定字段查询所指特定值
Query Context
在查询过程中,除了判断文档是否满足查询条件外,ES还会计算一个_score来标识匹配的程度,旨在判断目标文档和查询条件匹配的有多好。
常用查询
全文本查询 针对文本类型数据
字段级别查询 针对结构化数据,如数字、日期等

match_phrase分词匹配

会匹配到 name为"who is action" 或者 "action is who" 的数据

{
 "query":{
 "match_phrase":{
 "name":"who"
 }
 }
}

multi_match匹配name和country字段中有action的数据

{
 "query":{
 "multi_match":{
 "query":"action",
 "fields":["name","country"]
 }
 }
}

query_string(OR和AND大写)

{
 "query":{
 "query_string":{
 "query":"(action14 AND 13action) OR China",
 "fields":["name","country"] //字段可以去掉
 }
 }
}

term

{
 "query":{
 "term":{
 "name":"action14"
 }
 }
}

range 范围 gt>,gte>=,lt<,lte<=

    {
     "query":{
     "range":{
     "age":{
     "gte":10,
     "lte":12
     }
     }
     },
     "sort":[
     {"age":{"order":"desc"}}
     ]
    }
    {
     "query":{
     "range":{
     "date":{
     "gte":"2019-01-01",
     "lte":"now" //现在的日期
     }
     }
     }
    }

Filter Context

在查询过程中,只判断该文档是否满足条件,只有Yes或者No。

{
 "query":{
 "bool":{
 "filter":{
 "term":{
 "name":"action"
 }
 }
 }
 }
}

复合条件查询 以一定的逻辑组合子条件查询
常用查询
1.固定分数查询(不支持单独的match,只支持filter)2.布尔查询3....more

固定分数查询

1.这个时候_score会有分数

{
 "query":{
 "match":{
 "name":"who"
 }
 }
}

2.这个时候_score等于1

{
 "query":{
 "constant_score":{
 "filter":{
 "term":{
 "name":"action"
 }
 }
 }
 }
}

3.这个时候_score等于2

    {
     "query":{
     "constant_score":{
     "filter":{
     "term":{
     "name":"action"
     }
     },
     "boost":2
     }
     }
    }

布尔查询

1.should

{
 "query":{
 "bool":{
 "should":[
 {
 "match":{
 "name":"China"
 }
 },
 {
 "match":{
 "country":"China"
 }
 }
 ]
 }
 }
}

2.must

{
 "query":{
 "bool":{
 "must":[
 {
 "match":{
 "name":"China"
 }
 },
 {
 "match":{
 "country":"China"
 }
 }
 ]
 }
 }
}

3.must

{
 "query":{
 "bool":{
 "must":[
 {
 "match":{
 "name":"China"
 }
 },
 {
 "match":{
 "country":"China"
 }
 }
 ],
 "filter":{
 "term":{
 "age":16
 }
 }
 }
 }
}

4.must_not

{
 "query":{
 "bool":{
 "must_not":[
 {
 "term":{
 "name":"action"
 }
 }
 ]
 }
 }
}