1、http://localhost:9200 先当于查看mysql数据库本地连接信息,这里是查看本地es链接的信息
这里查看的前提是启动es服务器,Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单,以下我们所有的es命令本质上都是es开放给我们的接口,我们执行命令本质上那就是请求这些接口,来对es中的数据做增删改查,得到的结果也是es接口,而且这些接口还是restful类型的,这样更加简便清晰
mysql数据库备份、2、向ES 服务器发 PUT 请求 http://127.0.0.1:9200/shopping;幂等性意味着不会重复发送,我们可以把一个索引shopping抽象成一个数据库中唯一的一张表IndexTable;这里相当于做创建数据库的操作
3、向 ES 服务器发 GET 请求 : http://127.0.0.1:9200/_cat/indices?v 查看索引下所有请求相当于mysql下查看一个连接下的全部数据库show tables命令;
和目录下一一对应
需要补充的是:
4、向 ES 服务器发 GET 请求 : http://127.0.0.1:9200/shopping 相当于查看数据库的介绍信息,我们模拟插入数据
ES 服务器发 POST 请求 : http://127.0.0.1:9200/shopping/_doc/1
#请求参数
{"title":"华为手机","category":"华为","images":"http://www.gulixueyuan.com/hw.jpg","price":1999.00
}
添加个mapping映射结构
在这里插入代码片
具体信息如下
{"shopping": { //索引名"aliases": {}, //别名"mappings": { //映射"properties": { //相关属性"category": { //插入字段属性1"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"images": { //插入字段属性2"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"price": { //插入字段属性3"type": "float"},"title": { //插入字段属性4"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}},"settings": { //设置信息"index": { //索引信息"creation_date": "1643871853082","number_of_shards": "1", //分片数量,值为1代表这是单点es并非分布式"number_of_replicas": "1", //副本数量,为1代表无副本"uuid": "EZ6F1oOESKWk0gK8OFcPWA", //索引uuid,索引唯一标识,目录存储"version": {"created": "7080099"},"provided_name": "shopping" //索引名}}}
}
GET请求:http://127.0.0.1:9200/shopping/_search/1
等价于select * from shopping where id = 1;
GET请求:http://127.0.0.1:9200/shopping/_search
等价于 select * from shopping;
查询语句1
GET http://127.0.0.1:9200/shopping/_search
{"query":{"match_all":{}},"from":0,"size":2
}
select * from shopping limit 0,2;
查询语句3
GET http://127.0.0.1:9200/shopping/_search
{"query":{"match_all":{}},"sort":{"price":{"order":"desc"}}}select * from shopping order by price desc;
查询语句4
GET http://127.0.0.1:9200/shopping/_search
{"query":{"bool":{"must":[{"match":{"category":"小米"}},{"match":{"price":3999.00}}]}}
}
select * from shopping where `category`like '%小米%' AND `price`=3999.90
注意点:bool代表这是一个多条件查询语句,must代表and关系即多个条件必须同时成立,与之相对的是should也就是相当于与逻辑,即多个条件满足其一即可,match如果对于text类型字段就相当于like模糊查询,而如果是对于keyword那么就相当于=查询
语句5
查找category为小米的文档,在 Postman 中,向 ES 服务器发 GET请求 : http://127.0.0.1:9200/shopping/_search?q=category:小米(不安全),或者按下面的写法
http://127.0.0.1:9200/shopping/_search
{"query":{"match":{"category":"小米"}}}select * from shopping where category = 小米;注意:这里并不是完全等于,只要是包含小米
这是因为es在存储文档时会对text内容做分词操作,然后再存入倒排索引中去,也就是即使只用部分字段也能匹配到相关文档,如果你又elk使用经验就很好理解这个概念,因为这是理所当然的。再看一个复杂些的例子
http://127.0.0.1:9200/shopping/_search
{"query":{"match":{"category":"小华"}}}select * from shopping where category like %小% or category like %华%;
也就是把种类为华为和小米的手机全部筛选出来
如果我们不希望用分词进线匹配,而是希望完全匹配,那么就按如下
http://127.0.0.1:9200/shopping/_search
{"query":{"match_pharse":{"category":"小米"}}}select * from shopping where category like 小米;
语句6
source一定程度上可以看做是mysql中的表字段
http://127.0.0.1:9200/shopping/_search
{"query":{"match_all":{}},"_source":["title"]
}
select `title` from shopping;
语句7
http://127.0.0.1:9200/shopping/_search
{"query":{"match_all":{}},"sort":{"price":{"order":"desc"}}"size":2
}select * from shopping order by create_time desc limit 2;
语句8
注意点:must和filter都是相当于AND逻辑
http://127.0.0.1:9200/shopping/_search
{"query":{"bool":{"should":[{"match":{"category":"小米"}},{"match":{"category":"华为"}}],"filter":{"range":{"price":{"gt":2000}}}}}
}
select * from shopping where `category`like %小米% OR `category`like %华为% AND `price`='3999.90 AND price > 2000
{ "query": { "term": { "category": "华为" } }
}select * from shoping where `category`='华为' ;
{ "query": { "terms": { "category": [ 华为, 小米] } }
}select * from IndexTable where `categor`='华为' OR categor`='小米' ;
{ "range": { "age": { "gte": 20, "lt": 30 } }
}
select * from shopping where age between 20 and 30;
{"aggs":{//聚合操作"price_group":{//名称,随意起名"terms":{//分组"field":"price"//分组字段}}}}
select * from shopping group by price;
"aggs":{"price_avg":{//名称,随意起名"avg":{//求平均"field":"price"}}},"size":0
}
select avg('price') from shopping group by price ;
总结:es查询中的term,match,match_phase,query_string的区别
注意:post请求不具有幂等性
插入语句1
ES 服务器发 POST 请求 : http://127.0.0.1:9200/shopping/_doc/1
#请求参数
{"title":"华为手机","category":"华为","images":"http://www.gulixueyuan.com/hw.jpg","price":1999.00
}
insert into shoppin values ('华为手机',bbb='华为',ccc='http://www.gulixueyuan.com/hw.jpg',price='1999.00')
注意
①如果没有指定id,即 ES 服务器发 POST 请求 http://127.0.0.1:9200/shopping/_doc
//由于没有指定数据唯一性标识(ID),默认情况下, ES 服务器会随机生成一个
insert into shopping values (random(id),'华为手机','为','http://www.gulixueyn.com/hw.jpg',price='1999.00' );
②如果指定了id,那么也可以使用put请求来进行添加,但前提是添加的id是一个全新的,之前不存在的id,否则put就相当于做修改了
id不存在的情况,ES 服务器发 PUT 请求 http://127.0.0.1:9200/shopping/_doc/1
insert into shopping values (random(id),'华为手机','为','http://www.gulixueyn.com/hw.jpg',price='1999.00' );
id已存在的情况,ES 服务器发 PUT 请求 http://127.0.0.1:9200/shopping/_doc/1
请求参数如下
{"title":"华为手机2","category":"华为2","images":"http://www.gulixueyuan.com/hw.jpg","price":1999.00
}那这样就相当于更新操作update shopping set title = '华为手机2' and category = '华为2' where id = 1;
③对于post请求,post请求本身是用于添加数据的,但是如果添加数据的主键索引中已存在,那么效果就和put一样,起到修改的效果
POST局部修改
向es服务器发送post类型的请求 http://127.0.0.1:9200/shopping/_update/1
{"doc": {"title":"小米手机","category":"小米"}
}
相当于直接把id=1的shopping索引的文档直接给更新了
插入语句2
在 Postman 中,向 ES 服务器发 POST 请求:http://127.0.0.1:9200/shopping/_update/1。
{"doc": {"title":"小米手机","category":"小米"}
}
这里和mysql不同,这里使用post根据主键插入是可以覆盖的,通过覆盖营造出更新的效果;
DELETE 请求:http://127.0.0.1:9200/shopping/_doc/1
这个并不是简单的等价于delete from shooping where id =1;这里是逻辑删除,效果类似于
update shopping set flag = 1;//flag是逻辑标志位,1代表已删除,0代表还未删除
总结
bool 查询可以包含一个或多个查询字句如下
* must:必须匹配,且逻辑
* should:选择性匹配,与逻辑
* must_not:查询字句,必须不能匹配
* filter:必须匹配,和must类似match匹配需要具体情况具体分析,如果是keyword则必须完全匹配即等于号,如果是text那么只需要包含即可,因为keyword不能被分词,text文档时被分词后存入到倒排索引库中的 term主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed
terms 跟 term 有点类似,但 terms 允许指定多个匹配条件。 如果某个字段指定了多个值,那么文档需要一起去做匹配:
query和filter的区别
es中的term和match的区别
问题
http://127.0.0.1:9200/shopping/_search => 查询全部操作
http://127.0.0.1:9200/shopping/_doc/1 => 查询id为1的操作
http://127.0.0.1:9200/shopping/_update => 更新操作
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态