基础概念
集群和节点
索引:含有相同属性的文档集合,索引通过名字识别,小写英文字母命名,不能中划线数字等
类似 database
分片:每个索引都有多个分片,每个分片是一个Lucene索引
好处:提高io读写效率
分片只能在创建索引的时候指定,后期不能修改
备份:拷贝一份分片就完成了分片的备份
好处:当主分片不可用,备份即可顶替
备份可以查询,可以分摊压力
备份可以动态修改
类型:索引可以定义一个或多个类型,文档必须属于一个类型
类似 table
文档:文档是可以被索引的基本数据单位
类似 一行记录
一、索引创建:
6.0 版本中,不支持多个type创建,mappings只能添加一个。
put 127.0.0.1:9200/people
{
"settings":{
"number_of_shards" : 3,
"number_of_replicas" : 1
},
"mappings":{
"doc":{
"properties":{
"type":{
"type":"keyword"
},
"name":{
"type":"text"
},
"country":{
"type":"keyword"
},
"age":{
"type":"integer"
},
"date":{
"type":"date",
"format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
}
二、数据插入:
由于mappings只能添加一个,如何插入多个type呢? 答案是通过type字段进行标识!
put people/doc/1
{
"type":"man",
"name":"wxk",
"country":"china",
"date":"1990-02-19",
"age":21
}
put people/doc/2
{
"type":"woman",
"name":"qsy",
"country":"UK",
"date":"1990-02-12"
}
自动产生文档id插入
post people/doc/
{
"type":"man",
"name":"superwxk",
"country":"china",
"date":"2000-02-19 01:01:01"
}
检查:
POST people/_search
{
"query": {
"bool": {
"must": {
"match": {
"name": "wxk"
}
},
"filter": {
"match": {
"type": "man"
}
}
}
}
}
三、修改文档
直接修改
post 127.0.0.1:9200/people/doc/1/_update
{
"doc":{
"age":31
}
}
通过脚本修改文档
#直接写入参数
post 127.0.0.1:9200/people/doc/1/_update
{
"script":{
"lang":"painless",
#ctx 代表es上下文,_source代表当前文档
"inline":"ctx._source.age += 10"
}
}
#使用参数
post 127.0.0.1:9200/people/doc/1/_update
{
"script":{
"lang":"painless",
#ctx 代表es上下文,_source代表当前文档
"inline":"ctx._source.age = params.age",
"params":{
"age":100
}
}
}
四、删除文档/索引
删除文档
DELETE 127.0.0.1:9200/people/doc/1
删除索引
删除索引,索引的文档都会删掉
1、header插件可以直接删除
2、DELETE 127.0.0.1:9200/people
五、查询
定义book
novel:
word_count:integer
author:keyword
title: text
publish_date: 三种
插入数据1,2,3,4,5,6,7
造数据:
#建索引
put 127.0.0.1:9200/book
{
"settings":{
"number_of_shards" : 2,
"number_of_replicas" : 1
},
"mappings":{
"novel":{
"properties":{
"word_count":{
"type":"integer"
},
"author":{
"type":"keyword"
},
"title":{
"type":"text"
},
"publish_date":{
"type":"date",
"format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
}
#插数据
put book/novel/1
{
"word_count":"1000",
"author":"wxk",
"title":"ElasticSearch",
"publish_date":"1990-02-19"
}
put book/novel/2
{
"word_count":"2000",
"author":"qsy",
"title":"learn_学习",
"publish_date":"1990-03-19"
}
put book/novel/3
{
"word_count":"1000",
"author":"panda",
"title":"mooc",
"publish_date":"1990-04-19"
}
put book/novel/4
{
"word_count":"1500",
"author":"wxk",
"title":"ES",
"publish_date":"1991-10-19"
}
put book/novel/5
{
"word_count":"3000",
"author":"wxk",
"title":"ElasticSearch 学习",
"publish_date":"1990-02-19"
}
put book/novel/6
{
"word_count":"2000",
"author":"wxk",
"title":"python",
"publish_date":"2000-05-01"
}
put book/novel/7
{
"word_count":"4000",
"author":"wxk",
"title":"Scala和spark",
"publish_date":"1990-06-20"
}
简单查询
GET 127.0.0.1:/book/novel/1
复杂查询
POST 127.0.0.1:/book/_search
查询所有数据
{
"query":{
"match_all":{}
},
"from":1, #指定从哪里返回
"size":1 #指定返回几条数据
}
关键字查询,条件查询
#查询标题为 ElasticSearch ,按照出版时间倒序,字数升序查询
{
"query":{
"match":{
"title":"ElasticSearch"
}
},
"sort":[
{"publish_date":{"order":"desc"}},{"word_count":{"order":"asc"}}
]
}
解果是默认_score 倒序,
可以通过添加"sort"关键字,对字段进行升降排序
聚合查询
#字数进行聚合,解果为字数1000的5本书
#单个分组聚合
{
"aggs":{
"group_by_word_count":{ #这个名字自取的
"terms":{
"field":"word_count"
}
}
}
}
#多个分组聚合
{
"aggs":{
"group_by_word_count":{ #这个名字自取的
"terms":{
"field":"word_count"
}
},
"group_by_publish_date":{
"terms":{
"field":"publish_date"
}
}
}
}
#其他聚合函数,对某个字段进行解析计算
#注意,这里stats 只能对 data,integer进行操作,否则会报错
{
"aggs":{
"grades_word_count":{ #自定义
"stats":{ #这里填写函数名:
如:min
"field":"word_count"
}
}
}
}
结果为:
"aggregations": {
"grades_word_count": {
"count": 7,
"min": 1000,
"max": 4000,
"avg": 2071.4285714285716,
"sum": 14500
}
}
高级查询将在下篇记录