ElasticSearch是面向文档型数据库,一个数据就是一个文档
注意:Types的概念逐渐弱化,ES6.x中,一个index中只能包含一个type,ES7.x中,Type的概念已经被删除了。
索引操作
创建索引
PUT http://127.0.0.1:9200/shopping #shopping就是我们创建的索引
获取索引
GET http://127.0.0.1:9200/shopping
查看所有的索引
GET http://127.0.0.1:9200/_cat/indices?v #这个v的意思是把信息详细展示出来
信息如下图
删除索引
DELETE http://127.0.0.1:9200/shopping
文档操作
创建文档
POST http://127.0.0.1:9200/shopping/_doc #这个_doc其实就是type,但是只有这一个type
POST http://127.0.0.1:9200/shopping/_create/1001 #我们可以换一种请求方式,指定id为1001
查询索引下所有的数据
GET http://127.0.0.1:9200/shopping/_search
完全修改文档
PUT http://127.0.0.1:9200/shopping/_doc/1001 #然后请求体里面写更改后的文档内容
局部修改
POST http://127.0.0.1:9200/shopping/_update/1001 #一定要用post请求,且使用_update
删除文档
DELETE http://127.0.0.1:9200/shopping/_doc/1001
查询
http://127.0.0.1:9200/shopping/_doc/_search
表示查询的意思,但是我们增加了q=字段名:查询值
,就会把满足条件数据查询出来。
但是通过url中增加查询字段的方式不太好,一般我们再请求体中放查询条件。如下:
GET http://127.0.0.1:9200/shopping/_doc/_search
{
"query":{
"match":{
"category":"小米"
}
}
}
#请求体全量查询
GET http://127.0.0.1:9200/shopping/_doc/_search
{
"query":{
"match_all":{
}
}
}
#分页查询
GET http://127.0.0.1:9200/shopping/_doc/_search
{
"query":{
"match_all":{
}
},
"from":0, #跳过几条
"size":20 #每页查几条
}
#指定查出来我只要哪些字段
GET http://127.0.0.1:9200/shopping/_doc/_search
{
"query":{
"match_all":{
}
},
"from":0, #跳过几条
"size":20, #每页查几条
"_source":["category"]
}
//排序
GET http://127.0.0.1:9200/shopping/_doc/_search
{
"query":{
"match_all":{
}
},
"from":0, //跳过几条
"size":20, //每页查几条
"_source":["category"],
"sort":{
"price":{
"order":"desc"
}
}
}
多条件查询
GET http://127.0.0.1:9200/shopping/_search
{
"query":{ //表示查询的意思
"bool":{ //表示条件的意思
"must":[ //必须满足的条件 意思就是同时满足类别是小米且价格是1999的文档 must表示同时满足 &&
{
"match":{
"category":"小米"
},
"match":{
"price":1999.00
}
}
]
}
}
}
GET http://127.0.0.1:9200/shopping/_search
{
"query":{ //表示查询的意思
"bool":{ //表示条件的意思
"should":[ //意思就是满足类别是小米或者类别是华为的文档 满足其一即可 ||
{
"match":{
"category":"小米"
},
"match":{
"category":"华为"
}
}
],
"filter":{
"range":{
"price":{
"gt": 5000
}
}
}
}
}
}
完全匹配&高亮显示
GET http://127.0.0.1:9200/shopping/_doc/_search
{
"query":{
"match_phrase":{ //match_phrase代表完全匹配
"category":"小米"
}
},
"highligth":{
"field":{
"category":{}
}
}
}
聚合操作
{
"aggs":{ //表明聚合操作
"group_name":{ //聚合的名称可以随便写
"terms":{ //分组
"field":"price" //分组字段
}
}
}
}
映射
刚开始,我一听这个映射,我懵了,啥叫ElasticSearch中的映射呢?奇怪的很,这玩意呢?
好吧,大概就是一些设置字段能不能被索引,可不可以完整匹配或者模糊匹配,能不能当做索引字段的设置。
GET http://127.0.0.1:9200/user(索引名称)/_mapping
{
"properties":{
"name"(字段名):{
"type":"text", //意思就是name这个字段是text类型,可以被索引
"index":true
},
"sex":{
"type":"keyword", //可以被索引,但由于是keyword内心,得完全匹配
"index":true
},
"tel":{
"type":"keyword", //是关键字,但是不能被索引
"index":false
}
}
}