ElasticSearch理论随笔

本文详细介绍了 Elasticsearch 的核心概念与操作,包括文档的增删改查、分片与副本的原理、搜索与过滤的差异、查询优化与性能提升,以及索引管理和聚合分析等内容,揭示了其在分布式环境下的高效运作机制。
摘要由CSDN通过智能技术生成

1. 将 HTTP 命令由 PUT 改为 GET 可以用来检索文档,同样的,可以使用 DELETE 命令来删除文档,以及使用 HEAD 指令来检查文档是否存在。如果想更新已存在的文档,只需再次 PUT

2. Elasticsearch 尽可能地屏蔽了分布式系统的复杂性,在后台自动执行的操作:

① 分配文档到不同的容器 或 分片 中,文档可以储存在一个或多个节点中

② 按集群节点来均衡分配这些分片,从而对索引和搜索过程进行负载均衡

③ 复制每个分片以支持数据冗余,从而防止硬件故障导致的数据丢失

④ 将集群中任一节点的请求路由到存有相关数据的节点

⑤ 集群扩容时无缝整合新节点,重新分配分片以便从离群节点恢复

3. 在 Elasticsearch 中,数据是被存储和索引在 分片 中,索引实际上是指向 一个或者 多个物理 分片 的 逻辑命名空间 ,一个 分片 是一个底层的 工作单元 ,它仅保存了全部数据中的一部分。

4. 一个分片可以是  分片或者 副本 分片。 索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量。

5. 技术上来说,一个主分片最大能够存储 Integer.MAX_VALUE - 128 个文档,但是实际最大值还需要参考你的使用场景:包括你使用的硬件, 文档的大小和复杂程度,索引和查询文档的方式以及你期望的响应时长

6. 一个副本分片只是一个主分片的拷贝。副本分片作为硬件故障时保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务。

7. 集群的健康状况为 yellow 则表示全部  分片都正常运行(集群可以正常服务所有请求),但是 分片没有全部处在正常状态。

8. 字段的名字可以是任何合法的字符串,但 不可以 包含英文句号(.)。

9. _index:  选择一个索引名,这个名字必须小写,不能以下划线开头,不能包含逗号。

10. _type命名可以是大写或者小写,但是不能以下划线或者句号开头,不应该包含逗号, 并且长度限制为256个字符。

11. _idID 是一个字符串,当它和 _index 以及 _type 组合就可以唯一确定 Elasticsearch 中的一个文档。 当你创建一个新的文档,要么提供自己的 _id ,要么让 Elasticsearch 帮你生成。

12. 在请求的查询串参数中加上 pretty 参数,该功能使得JSON 响应体更加可读

13. GET 请求的响应体包括 {"found": true} ,这证实了文档已经被找到。 如果我们请求一个不存在的文档,我们仍旧会得到一个 JSON 响应体,但是 found 将会是 false 。 此外, HTTP 响应码将会是 404 Not Found ,而不是 200 OK 。附官方释图:

14. 通过传递 -i 参数给 curl 命令,该参数能够显示响应的头部。附官方释图:

15. 返回文档的一部分:默认情况下, GET 请求会返回整个文档,这个文档正如存储在 _source 字段中的一样。但是也许你只对其中的 title 字段感兴趣。单个字段能用 _source 参数请求得到,多个字段也能使用逗号分隔的列表来指定。或者,如果你只想得到 _source 字段,不需要任何元数据。附官方释图:

16. 检查文档是否存在:用 HEAD 方法来代替 GET 方法。 HEAD 请求没有返回体,如果文档存在, Elasticsearch 将返回一个 200 ok 的状态码,若文档不存在, Elasticsearch 将返回一个 404 Not Found 的状态码。

17. 更新整个文档:在 Elasticsearch 中文档是 不可改变 的,不能修改它们。相反,如果想要更新现有的文档,需要 重建索引 或者进行替换, 可以使用相同的 index API 进行实现,更新成功后,可以在响应体中看到,增加了 _version 字段值,created 标志设置成 false ,是因为相同的索引、类型和 ID 的文档已经存在。在内部,Elasticsearch 已将旧文档标记为已删除,并增加一个全新的文档。 尽管你不能再对旧版本的文档进行访问,但它并不会立即消失。当继续索引更多的数据,Elasticsearch 会在后台清理这些已删除文档。

18. 创建新文档:怎么确认我们正在创建一个完全新的文档

① 第一种方法使用 op_type 查询-字符串参数:

② 第二种方法是在 URL 末端使用 /_create :

如果创建新文档的请求成功执行,Elasticsearch 会返回元数据和一个 201 Created 的 HTTP 响应码。

如果具有相同的 _index 、 _type 和 _id 的文档已经存在,Elasticsearch 将会返回 409 Conflict 响应码,及出错误信息。

19. 删除文档:使用 DELETE 方法删除文档

① 如果找到该文档,Elasticsearch 将要返回一个 200 ok 的 HTTP 响应码,和一个类似以下结构的响应体。注意,字段 _version 值已经增加:

② 如果文档没有找到,我们将得到 404 Not Found 的响应码和类似这样的响应体:

即使文档不存在( Found 是 false ), _version 值仍然会增加。这是 Elasticsearch 内部记录本的一部分,用来确保这些改变在跨多节点时以正确的顺序执行。

20. 取回多个文档:每个文档都是单独检索和报告的。即使有某个文档没有找到,上述请求的 HTTP 状态码仍然是 200 。事实上,即使请求 没有 找到任何文档,它的状态码依然是 200 --因为 mget 请求本身已经成功执行。 为了确定某个文档查找是成功或者失败,你需要检查 found 标记。

① mget API 要求有一个 docs 数组作为参数,每个元素包含需要检索文档的元数据, 包括 _index 、 _type 和 _id 。如果你想检索一个或者多个特定的字段,那么你可以通过 _source 参数来指定这些字段的名字:

② 该响应体也包含一个 docs 数组, 对于每一个在请求中指定的文档,这个数组中都包含有一个对应的响应,且顺序与请求中的顺序相同。 其中的每一个响应都和使用单个 get request 请求所得到的响应体相同:

如果所有文档的 _index 和 _type 都是相同的,你可以只传一个 ids 数组,而不是整个 docs数组:

21. shard = hash(routing) % number_of_primary_shards

routing 是一个可变值,默认是文档的 _id ,也可以设置成一个自定义的值。 routing 通过 hash 函数生成一个数字,然后这个数字再除以 number_of_primary_shards (主分片的数量)后得到 余数 。这个分

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值