大家好,这里是 Double凯,下面是这一期的后端文章,喜欢的朋友点赞点在看哦~
ElasticSearch8新特性
-
减少内存堆使用,完全支持 ARM 架构,引入全新的方式以使用更少的存储空间,从 而让每个节点托管更多的数据。 -
降低查询开销,在大规模部署中成效尤为明显 -
提高日期直方图和搜索聚合的速度,增强页面缓存的性能,并创建一个新的 “pre-filter”搜索短语。 -
在 Elasticsearch 7.3 和 Elasticsearch 7.4 版中,引入了对矢量相似函数的支持 在最新发布的 8.0 版本中,也同样增加和完善了很多新的功能 -
增加对自然语言处理 (NLP) 模型的原生支持,让矢量搜索功能更容易实现,让客户和 员工能够使用他们自己的文字和语言来搜索并收到高度相关的结果。 -
直接在 Elasticsearch 中执行命名实体识别、情感分析、文本分类等,而无需使用额外 的组件或进行编码。 -
Elasticsearch 8.0 基于 Lucene 9.0 开发的,那些利用现代 NLP 的搜索体验,都可以借 助(新增的)对近似最近邻搜索的原生支持,快速且大规模地实现。通过 ANN,可以 快速并高效地将基于矢量的查询与基于矢量的文档语料库(无论是小语料库、大语料库 还是巨型语料库)进行比较。
ElasticSearch基础语法操作
索引操作
创建索引
PUT myindex
重复创建索引ES会报错如下
查询指定索引
根据索引名称查询指定索引,如果查询到,会返回索引的详细信息
如果查询的索引不存在的是会返回如下报错信息
查询所有索引
为了方便,可以查询当前所有索引数据。这里请求路径中的_cat 表示查看的意思,indices
表示索引,所以整体含义就是查看当前 ES 服务器中的所有索引,就好像 MySQL 中的 show
tables 的感觉
这里的查询结果表示索引的状态信息,按顺序数据表示结果如下:
内容 | 含义 | 具体描述 |
---|---|---|
green | health | 当前服务器健康状态: green(集群完整) yellow(单点正常、集群不完整) red(单点不正常) |
open | status | 索引打开、关闭状态 |
myindex | index | 索引名 |
Swx2xWHLR6yv23kTrK3sAg | uuid | 索引统一编号 |
1 | pri | 主分片数量 |
1 | rep | 副本数量 |
0 | docs.count | 可用文档数量 |
0 | docs.deleted | 文档删除状态 |
450b | store.size | 主分片和副分片整体占空间大小 |
225b | pre.store.size | 主分片占空间大小 |
删除索引
删除存在索引:
删除不存在的索引,报错如下:
文档操作
文档是 ES 软件搜索数据的最小单位, 不依赖预先定义的模式,所以可以将文档类比为表的
一行JSON类型的数据。我们知道关系型数据库中,要提前定义字段才能使用,在Elasticsearch
中,对于字段是非常灵活的,有时候,我们可以忽略该字段,或者动态的添加一个新的字段。
创建文档
索引已经创建好了,接下来我们来创建文档,并添加数据。这里的文档可以类比为关系型数
据库中的表数据,添加的数据格式为 JSON 格式
POST myindex/_doc
{
"id":1,
"name":"yinkai",
"age":12,
"city":"beijing"
}
返回的状态是
{
"_index": "myindex",
"_id": "HyYWNYwBx5lhD1Y3qaZT",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
此处因为没有指定数据唯一性标识,所以无法使用 PUT 请求,只能使用 POST 请求,且对 数据会生成随机的唯一性标识。否则会返回错误信息。
如果在创建数据时,指定唯一性标识,那么请求范式 POST,PUT 都可以。
创建索引还有使用_create方式,使用这种方式如果Id已经存在,就会报错
{
"error": {
"root_cause": [
{
"type": "version_conflict_engine_exception",
"reason": "[6]: version conflict, document already exists (current version [1])",
"index_uuid": "lUJz91IITzG7grVdUhDi3A",
"shard": "0",
"index": "es_db"
}
],
"type": "version_conflict_engine_exception",
"reason": "[6]: version conflict, document already exists (current version [1])",
"index_uuid": "lUJz91IITzG7grVdUhDi3A",
"shard": "0",
"index": "es_db"
},
"status": 409
}
创建索引唯一标识
PUT myindex/_doc/1001
{
"id":"1001",
"name":"double凯",
"age":30
}
查询文档
根据唯一性标识查询文档
GET myindex/_doc/1001
{
"_index": "myindex",
"_id": "1001",
"_version": 1,
"_seq_no": 3,
"_primary_term": 5,
"found": true,
"_source": {
"id": "1001",
"name": "double凯",
"age": 30
}
}
修改文档
修改文档本质上和新增文档是一样的,如果存在就修改,不存在就新增
并发场景下修改文档注意事项:
全量更新,整个json都会替换,格式: [PUT | POST] /索引名称/_doc/id
如果文档存在,现有文档会被删除,新的文档会被索引
使用_update部分更新,格式: POST /索引名称/_update/id
update不会删除原来的文档,而是实现真正的数据更新_seq_no和_primary_term是对_version的优化,7.X版本的ES默认使用这种方
式控制版本,所以当在高并发环境下使用乐观锁机制修改文档时,要带上当前文
档的_seq_no和_primary_term进行更新:
删除文档
删除一个文档不会立即从磁盘上删除,它只是被标记成已经删除
DELETE myindex/_doc/HyYWNYwBx5lhD1Y3qaZT
{
"_index": "myindex",
"_id": "HyYWNYwBx5lhD1Y3qaZT",
"_version": 2,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 1,
"_primary_term": 1
}
文档批量操作
批量操作可以减少网络连接所产生的开销,提升性能
-
支持在一次API调用中,对不同的索引进行操作 -
可以在URI中指定Index,也可以在请求的Payload中进行 -
操作中单条操作失败,并不会影响其他操作 -
返回结果包括了每一条操作执行的结果
批量创建文档
POST /_bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "index" : { "_index" : "test", "_id" : "2" } }
{ "field2" : "value2" }
{ "index" : { "_index" : "test", "_id" : "3" } }
{ "field3" : "value3" }
批量修改文档
POST /_bulk
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field1" : "new_value1"} }
{ "update" : {"_id" : "2", "_index" : "test"} }
{ "doc" : {"field2" : "new_value2"} }
{ "update" : {"_id" : "3", "_index" : "test"} }
{ "doc" : {"field3" : "new_value3"} }
批量删除文档
POST /_bulk
{ "delete" : { "_index" : "test", "_id" : "1" } }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "delete" : { "_index" : "test", "_id" : "3" } }
今天的ElasticSearch操作我们就先分享到这里,后期我们针对ElasticSearch高级查询进行详细的讲解,敬请期待
“
hello我们是Double凯的程序栈,关注我们,遨游知识海洋,共赴探索之旅
往期好文章
1. 推荐四个好用且绝对用得着的前端库
2. 四款开源富文本编辑器,支持Vue、React
3. ELK技术栈之ES8.x安装教程
4. 前端圈2023年现状
发表评论