Elasticsearch的基本用法(增删改查)

================基础概念=======================
索引--含有相同属性的文档集合
类型--索引可以定义一个或者多个类型,文档必须属于一个类型
文档--文档是可以被索引的基础数据单位

分片--每个索引都有多个分片,每个分片是一个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)
{
"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"
}
}
}
}


================高级查询=====================

=======子条件查询 特定字段查询所指特定值=======
=====1.Query Context=====
在查询过程中,除了判断文档是否满足查询条件外,ES还会计算一个_score来标识匹配的程度,旨在判断目标文档和查询条件匹配的有多好。

常用查询
全文本查询 针对文本类型数据
字段级别查询 针对结构化数据,如数字、日期等
1.===match_phrase分词匹配====
会匹配到 name为"who is action" 或者 "action is who" 的数据
{
"query":{
"match_phrase":{
"name":"who"
}
}
}
2.===multi_match==== 匹配name和country字段中有action的数据
{
"query":{
"multi_match":{
"query":"action",
"fields":["name","country"]
}
}
}
3.===query_string=== (OR和AND大写)
{
"query":{
"query_string":{
"query":"(action14 AND 13action) OR China",
"fields":["name","country"] //字段可以去掉
}
}
}
4.===term=====
{
"query":{
"term":{
"name":"action14"
}
}
}
5.====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" //现在的日期
}
}
}
}
=====2.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.======
{
"query":{
"bool":{
"must":[
{
"match":{
"name":"China"
}
},
{
"match":{
"country":"China"
}
}

],
"filter":{
"term":{
"age":16
}
}
}
}
}
4.===must_not====
{
"query":{
"bool":{
"must_not":[
{
"term":{
"name":"action"
}
}
]
}
}
}


分类:   数据库  / 
标签:   elasticsearch
 /  浏览量:  522
2019-4-30 18:00 Tuesday