日常工作之 Elasticsearch 常用查询语句汇总
- 查询现有索引
- 创建索引
- 查询索引结构
- 插入数据
- 查询索引数据
- 查看索引磁盘占用信息
- 删除索引
- 查看分词器分词结果
- 指定查询数量
- 指定条件查询
- 数据迁移
- 统计索引数据量
- 更新数据
在使用 es 的过程中,总是会用到 es 的查询语句,考虑到一些 es 使用过程中语句没那么频繁,就会导致总是用起来的时候会忘记。那么为了方便用的时候可以快速查询到想用的内容,这里主要对 es 日常用到的查询语句 做一个总结展示,记录查询语句方便后续用到时查询。
查询现有索引
为了可以快速的找到想要查询的索引,但是记不得索引的全称,这个时候就可以通过以下命令来查询当前连接的 es 的所有索引
GET /_cat/indices?v
查询结果如图,这时我们就可以看到我们当前 es 下的所有的索引名称,在 index 列,其中 crm_* 开头的就是业务相关的 es 索引表的名称
创建索引
查询索引之前,首先就是需要创建一个索引,这里我们创建一个索引名称为 test 的索引。简单的创建索引语句如下,当然你也可以在创建索引时指定分片等
PUT /test
{"mappings": {"test":{"properties": {"content":{"type": "text", "analyzer": "hanlp"}}}}
}
所以创建成功之后你可以看到右侧的创建成功的信息
查询索引结构
当索引创建成功之后,那么你可能想要看一看索引中的字段信息。或者是当你需要用到某个索引,但是由于时间久忘记具体索引字段时可以使用如下语句查询索引结构,索引字段
GET /test/_mapping
这里我们看到的索引结构以及字段名称如图所示
插入数据
索引创建成功之后,就可以对指定的索引进行操作。首先就可以插入数据,通常插入数据的命令,可以通过put 命令为指定索引插入数据,比如
PUT test/test/1
{"content":"初级会计资格证"
}
执行索引插入数据操作成功之后可以看到右侧返回的索引创建成功信息,其中 result 返回 created 表示索引数据创建成功,如果是更新索引的话,这里 result 会返回 updated ,后面会讲到
查询索引数据
那么数据插入成功之后,我们就想确认一下我们的数据有没有插入成功,就可以通过以下命令查询索引数据,暂时没有指定具体的查询条件
GET test/_search
返回的结果如下,这时可以看到我们插入的数据已经成功展示了
查看索引磁盘占用信息
当使用了一段时间的 es 数据索引之后,我们可能会担心 es 索引磁盘的占用情况,同时也可以通过监控 es 磁盘的剩余空间来保证 es 数据可以没有问题的插入。这个时候就可以通过命令查询指定索引的磁盘占用信息
GET /_cat/indices/test?v
通过命令我们可以看到我们当前索引已经占用的磁盘空间信息
删除索引
当你在创建索引时遇到索引创建错误的情况,或者是之前讲过的你需要更改索引字段属性的时候,你可能需要通过创建临时索引的方式,然后迁移数据到新的索引中去,再删除旧的索引,那么这时候就会用到删除索引。对于删除索引操作,大家需要注意,删除的索引数据不能恢复,谨慎操作
DELETE test
查看分词器分词结果
另外还有就是为了提高 es 对于文本类型字段的搜索效率,这个时候就可能会对文本型字段添加分词器。当时当你考虑分词器的时候,你可能并不知道选择哪种分词器分词的效果更好。因此对于新的分词器,不了解其分词后的具体效果,可以通过命令执行分词器查看其分词结果
POST /_analyze
{"analyzer": "hanlp", "text": "查看哦,同时我们也会给您分配专属的学习规划师带"
}
比如说当前选择的hanlp 分词器的分词效果如图
这里需要注意的是,hanlp 分词器不是 es 的默认分词器,因此需要你自己下载安装hanlp 的分词器插件,在安装 hanlp 分词器插件时需要选择 hanlp 的分词器版本与当前你的 es 数据库版本一致才可以。
指定查询数量
在使用 es 查询数据时,es 默认每次查询指定条件下的 10 条数据,这个时候如果你想要查询更多数据的话,你就需要指定每页查询的数据量,通过 size 属性来设置,正如命令行
GET crm_meiqia_conversation/_search
{"size":200
}
指定条件查询
同样的,es 的查询也支持多种复杂条件的数据查询,比如如下的查询命令,执行条件查询分为多种条件,下面来指定一个基本的查询
GET crm_meiqia_conversation/_search
{"query": {"bool" : {"must" : [{"bool" : {"filter" : [{"range" : {"convStartDate" : {"from" : 1719849600000,"to" : null,"include_lower" : true,"include_upper" : true,"boost" : 1.0}}},{"range" : {"convEndDate" : {"from" : null,"to" : 1719935999000,"include_lower" : true,"include_upper" : true,"boost" : 1.0}}},{"term" : {"clientInfo.uid" : {"value" : "34546407","boost" : 1.0}}},{"term" : {"agentId" : {"value" : "10002351","boost" : 1.0}}},{"match_phrase_prefix" : {"convContent.content" : {"query" : "请您稍等","slop" : 0,"max_expansions" : 50,"boost" : 1.0}}}],"adjust_pure_negative" : true,"boost" : 1.0}}],"adjust_pure_negative" : true,"boost" : 1.0}}
}
查询后的返回结果如图所示,此时查询到的数据就是符合条件的数据
数据迁移
当需要更改索引结构时,需要先把原有索引的数据迁移到相同临时索引中,待更改索引结构之后再迁移回来,此时就是数据迁移,迁移数据用到
POST _reindex
{ "source": { "index": "crm_meiqia_conversation","size":500}, "dest": { "index": "crm_meiqia_conversation_tmp" }
}
或者也可以选择异步迁移数据的方式,比如如下命令
POST _reindex?wait_for_completion=false
{ "source": { "index": "crm_meiqia_conversation","size":500}, "dest": { "index": "crm_meiqia_conversation_tmp" }
}
异步迁移数据,数据迁移结果通过命令查看
GET /_tasks/cbwVMU6UTACFPxKW0zkOcw:456723575
统计索引数据量
当然,也有的场景需要统计索引的全部数据,那么想要统计索引的全部数据量,可以通过如下命令
GET crm_meiqia_conversation/_count
比如这里统计 索引 crm_meiqia_conversation 的 数据量,统计结果如图所示
更新数据
还有一种情况就是,在新增索引数据之后往往会伴随着更新数据,那么更新指定索引指定对象字段中数据内容,比如如下命令
POST test/test/1/_update
{"doc":{"content":"ceshi测试"}
}
执行上述 命令之后可以看到 右侧返回结果 result 为 updated 表示数据更新成功
数据更新成功后通过查询命令查看数据可以看到
到这里关于es 日常用到的相关语句差不多整理完了,有需要的可以查阅哈。