当前位置:   article > 正文

ElasticSearch篇——Restful风格详解以及常见的命令,涵盖_cat命令查看ES默认数据、索引和文档的增删改查以及复杂搜索,超详细、超全面、超细节!_es gte

es gte

ES的RestFul风格

一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要是用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更加简洁,更有层次,更易于实现缓存等机制。

一、基本Rest命令说明

_cat命令查看ES默认数据

获得ES健康值

1、命令

GET _cat/health

对应的就是head可视化界面的下面的信息(换句话说,可视化工具也是不断发送这个health命令,来回显当前数据库的健康值!)

查看当前ES下的索引信息

1、命令

GET _cat/indices?v

索引和文档的增删改查

创建索引并设置文档字段类型

1、命令
给索引(数据库表),给表中的字段设置类型

  1. PUT /索引
  2. {
  3. "mapping": {
  4. "properties": {
  5. "name": {
  6. "type": "text"
  7. },
  8. "age": {
  9. "type": "long"
  10. },
  11. "birthday": {
  12. "type": "date"
  13. }
  14. }
  15. }
  16. }

2、在head可视化工具中查看

3、获得test01的信息
可以通过GET请求,获得这个索引中的信息
(1)命令

(2)响应

4、拓展:如果我们没有给我们的索引中的字段设置类型,那么ES会默认给相关的字段设置类型!
之前创建guihui 索引的时候没设置字段的类型,我们通过GET命令查看一下字段的默认类型

创建索引/文档

创建一个索引、类型和文档,以及文档中的内容
(1)在kibana开发者工具中输入命令

  1. PUT 索引名/类型(快去掉了)/文档id
  2. {请求体}

第一次这个result就是created创建的意思

(2)进入到head可视化界面中,可以查看当前数据是否创建成功!

修改索引/文档数据

方式一:(这种方式存在弊端,如果第二次更新的内容少于原本存在的数据,那么就会丢失掉那部分数据!所以慎用!
直接使用PUT的方式,将原来的数据进行覆盖
1、当前索引中的文档数据

2、直接通过PUT命令覆盖
版本号version会增加,现在变成了2;当前的状态变成了update


3、查看guohui索引的数据
更新成了李四等新数据

方式二:(更推荐使用这种方式)
通过POST命令来更新索引中的文档(行数据)
1、命令
更新命令多了一个"doc"

  1. POST /索引/类型/文档id/_update
  2. {
  3. "doc": {
  4. "name": "詹姆斯",
  5. "age": 99
  6. }
  7. }

删除索引/者文档

删除文档
1、命令

DELETE 索引/类型/文档Id

2、查看head可视化界面

删除索引
1、命令

DELETE 索引

2、去可视化界面查看
guihui索引(数据库)被删除了!

查询索引数据/某条文档(含条件查询)

索引test01数据

一、查询索引全部数据
1、命令

PUT 索引/类型/_search

二、查询文档通过文档的id
1、命令

GET 索引/类型/文档id

三、条件查询
1、命令
q代表着query的意思

GET 索引/类型/_search?q=name:李四

复杂搜索(复杂查询)重点!

下面所讲的复杂查询由开头至结尾顺序学习,由浅入深

以下的数据均来自于查询该索引

一、带参数的查询
1.命令

  1. GET test01/_search
  2. {
  3. "query": {
  4. "match": { (match表示精确匹配,这里还可以换成其他的参数)
  5. "name": "张三"
  6. }
  7. }
  8. }

如果索引中存在某字段相似的,那么查询出来的结果还会有一个匹配度的数值,将来可能会按照分值来排序
将来:
hits会对应我们Java中的对象
total:查询的结果数

二、过滤结果
1.命令
_source命令:是过滤搜索结果的关键字
相当于MySQL 中的select 字段 from table where 判断条件
 

  1. GET test01/_search
  2. {
  3. "query": {
  4. "match": {
  5. "name": "王五"
  6. }
  7. },
  8. "_source":["name","age"]
  9. }

三、根据某个字段进行排序
类似于MySQL的order by ...desc/asc
1、命令
sort命令,下面的示例是查询name等于王五的数据,并且按照age进行升序排序

  1. GET test01/_search
  2. {
  3. "query": {
  4. "match": {
  5. "name": "王五"
  6. }
  7. },
  8. "sort": [
  9. {
  10. "age": {
  11. "order": "asc"
  12. }
  13. }
  14. ]
  15. }

四、分页查询
相当于SQL中的Limit
1、命令
from 和 size 命令,下面的实例是从第0个数据开始(和我们之前学习的分页的数据结果是一样的,起始都是从0开始),一页展示1条数据,所以和上面的搜索出的两条数据是不同的,现在是只展示了一条数据

  1. GET test01/_search
  2. {
  3. "query": {
  4. "match": {
  5. "name": "王五"
  6. }
  7. },
  8. "sort": [
  9. {
  10. "age": {
  11. "order": "asc"
  12. }
  13. }
  14. ],
  15. "from":0,
  16. "size":1
  17. }

五、布尔实现多条件的精确查询
must可以精确的匹配对应的数据,相当于SQL中的“and”,所有的条件都满足
1、命令

  1. GET test01/_search
  2. {
  3. "query": {
  4. "bool": {
  5. "must": [
  6. {
  7. "match": {
  8. "name": "王五"
  9. }
  10. },
  11. {
  12. "match": {
  13. "age": "11"
  14. }
  15. }
  16. ]
  17. }
  18. }
  19. }

六、布尔实现or类型查询
should关键字,相当于SQL 中的“or”,后面的条件满足其一即可被查询出来
1、命令

  1. GET test01/_search
  2. {
  3. "query": {
  4. "bool": {
  5. "should": [
  6. {
  7. "match": {
  8. "name": "王五"
  9. }
  10. },
  11. {
  12. "match": {
  13. "age": "11"
  14. }
  15. }
  16. ]
  17. }
  18. }
  19. }

七、布尔值查询-类似于SQL中的“not”
1、命令
must_not
下面的实例是查询年龄不是11岁的人

  1. GET test01/_search
  2. {
  3. "query": {
  4. "bool": {
  5. "must_not": [
  6. {
  7. "match": {
  8. "age": "11"
  9. }
  10. }
  11. ]
  12. }
  13. }
  14. }

八、在查询的时候,加过滤器
filter关键字,就是在查询的时候加上范围的过滤
gte: great than equals表示大于等于
lte: less than equals表示小于等于
去掉e就把等于去掉了

1、命令

  1. GET test01/_search
  2. {
  3. "query": {
  4. "bool": {
  5. "must": [
  6. {
  7. "match": {
  8. "name": "王五"
  9. }
  10. }
  11. ],
  12. "filter": {
  13. "range": {
  14. "age": {
  15. "gt": 10,
  16. "lt": 20
  17. }
  18. }
  19. }
  20. }
  21. }
  22. }

九、根据字段中的某个数据进行查询
可以精确的匹配到某条数据中包含某个数据,并且还能返回查询的结果的分值
1、命令
通过"match"关键字,里面输入索引中字段的名称和需要匹配的数据,ES的优势在于,想要匹配多个数据,直接用空格隔开即可,另外查询的结果还会对这些数据进行分值的评定,将来还便于我们根据分值来做排序

十、精确查询
精确查询是通过term关键字来实现的,他的底层是通过直接查询倒排索引,所以效率更高!
关于分词的解释:
(1)term:直接查询精确的
(2)match:会使用分词器(会先分析文档,然后通过分析的文档进行查询!)
所以综上所述,term的查询更高效
补充:
如果类型是text类型,那么是可以被分词器解析的;如果是keyword类型的,是不能被分词器解析,换句话说,如果我们索引中的某个字段的类型设置的是keyword类型,那么我想使用match或者term来查询这个字段匹配的,他只能查询出完全匹配的数据来,其他的数据差一个字符都不能被查询出来!

十一、高亮查询(重点)
重点就是highlight关键字

至此,关于ES详细的操作查询命令介绍完毕,尤其是高亮查询在将来的开发中会经常用到,比如日志定位等等。

后续还会持续更新,敬请期待~~~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/518928
推荐阅读
相关标签
  

闽ICP备14008679号