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

ES的RestFul风格

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

一、基本Rest命令说明

_cat命令查看ES默认数据

获得ES健康值

1、命令

GET _cat/health

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

查看当前ES下的索引信息

1、命令

GET _cat/indices?v

索引和文档的增删改查

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

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

PUT /索引
{
    "mapping": {
        "properties": {
            "name": {
                "type": "text"
            },
            "age": {
                "type": "long"
            },
            "birthday": {
                "type": "date"
            }
        }
    }
}

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

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

(2)响应

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

创建索引/文档

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

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

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

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

修改索引/文档数据

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

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


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

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

POST /索引/类型/文档id/_update
{
    "doc": {
        "name": "詹姆斯",
        "age": 99
    }
}

删除索引/者文档

删除文档
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.命令

GET test01/_search
{
  "query": {
    "match": {  (match表示精确匹配,这里还可以换成其他的参数)
      "name": "张三"
    }
  }
}

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

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

GET test01/_search
{
  "query": {
    "match": {
      "name": "王五"
    }
  },
  "_source":["name","age"]
}

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

GET test01/_search
{
  "query": {
    "match": {
      "name": "王五"
    }
  },
  "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ]
}

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

GET test01/_search
{
  "query": {
    "match": {
      "name": "王五"
    }
  },
  "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ],
  "from":0,
  "size":1
}

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

GET test01/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "王五"
          }
        },
        {
          "match": {
            "age": "11"
          }
        }
      ]
    }
  }
}

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

GET test01/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "王五"
          }
        },
        {
          "match": {
            "age": "11"
          }
        }
      ]
    }
  }
}

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

GET test01/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "age": "11"
          }
        }
      ]
    }
  }
}

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

1、命令

GET test01/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "王五"
          }
        }
      ],
       "filter": {
        "range": {
          "age": {
            "gt": 10,
            "lt": 20
          }
        }
      }
    }
  }
}

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

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

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

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

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

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Be explorer

若认可笔者文章,手头富裕望支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值