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详细的操作查询命令介绍完毕,尤其是高亮查询在将来的开发中会经常用到,比如日志定位等等。文章来源:https://www.toymoban.com/news/detail-795510.html
后续还会持续更新,敬请期待~~~文章来源地址https://www.toymoban.com/news/detail-795510.html
到了这里,关于ElasticSearch篇——Restful风格详解以及常见的命令,涵盖_cat命令查看ES默认数据、索引和文档的增删改查以及复杂搜索,超详细、超全面、超细节!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!