ElasticSearch基础和常用命令增删改查讲解
程序员文章站
2022-06-24 20:48:08
基础概念
集群和节点
索引:含有相同属性的文档集合,索引通过名字识别,小写英文字母命名,不能中划线数字等
类似 database
分片:每个索引都有多个分片,每个分片是一个Lucene...
基础概念
集群和节点
索引:含有相同属性的文档集合,索引通过名字识别,小写英文字母命名,不能中划线数字等
类似 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 } }
高级查询将在下篇记录