《Elasticsearch权威指南》学习笔记

文章详细介绍了Elasticsearch的数据访问模式,包括HTTP请求结构,数据的近实时处理,以及更新和删除操作的机制。还讨论了Elasticsearch的内存配置,JVM堆设置,以及生产环境的安全性和性能优化,如禁用交换、线程和文件描述符的配置。此外,提到了查询、过滤的区别,以及集群行为和节点模式识别。
摘要由CSDN通过智能技术生成

        1.访问数据模式:<HTTP Verb>/<Index>/<Endpoint>/<ID>

        2.Elasticsearch提供近实时的数据操作和搜索功能。默认情况下,从 索引、更新、删除数据到在搜索结果中显示数据,会有少于1s的延迟 (刷新间隔)。

        3.实际上Elasticsearch的数据存储结构决定了其不能像关系数 据库那样进行字段级的更新,所有的更新都是先删除旧文档,再插入 一条新文档,但这个过程对用户来说是透明的。

        4.在Elasticsearch中,删除操作只是把需要删除的文档的ID记 录到了一个列表中,当段合并时才有可能真正把源文档删除。

        5.批量API不会由于其中一个操作失败而失败。

        6.hits.total的准确性由请求参数track_total_hits控制,当设置为true 时,请求将准确跟踪总命中数("relation":"eq")。

        7.Elasticsearch一旦返回请求结果,将不再为该请求维 护任何服务端资源。

        8.如果未指定size,则默认为10。

        9.查询和过滤在功能上是相同的,只不过过滤不计算相似度得分,性能更高。

        10.谨记,集群名称是组建集群的唯一标识。

        11.一旦为network.host提供自定义设置,Elasticsearch就假定正在从开发模式切换到生产模式,并将许多系统启动检查从警告升级到异常。

        12.默认情况下,Elasticsearch告诉JVM使用最小和最大大小为1GB的堆。当转移到生产环境时,需要配置堆大小以确保Elasticsearch具有足够的堆可用,这是很重要的。

        13.Elasticsearch将通过Xms(最小堆大小)和Xmx(最大堆大小)设置分配jvm.options中指定的整个堆栈。

这些设置的值取决于服务器上可用的内存大小。良好的经验法则是:

  • 将最小堆大小(Xms)和最大堆大小(Xmx)设置为相等的值。
  • Elasticsearch可用的堆越大,可以用于缓存的内存就越大。但请注意,堆太大会触发长时间的垃圾回收以致服务集暂停。
  • 将Xmx设置为不超过物理RAM的50%,以确保有足够的物理内存用于内核文件系统缓存。
  • 不要将Xmx设置为高于Jvm用于压缩对象指针(compressed oops)的截止值。确切的截止值有所不同,但接近32GB。
  • 更好的是,尝试保持在零基压缩OOP的阈值以下。精确的截止值有所不同,但在大多数系统中26GB是安全的,而在某些系统中可能高达30GB 。

        14.默认情况下,Elasticsearch将Jvm内存不足异常上的堆转储到默认数据目录,即data目录。

        15.默认情况下,Elasticsearch假定正在开发模式下工作。如果下述列表任何设置配置不正确,将向日志文件写入警告,但仍能够启动并运行Elasticsearch节点。一旦配置了network.host等网络设置,Elasticsearch就会假定正在用于生产环境,并将上述警告升级为异常,这些异常将阻止Elasticsearch节点启动。这是一个重要的安全措施,可以确保Elasticsearch不会因为服务器配置错误而丢失数据。

        16.大多数操作系统尝试尽可能多地将内存用于文件系统缓存,因此应用程序的数据可能会被移到swap区,这可能导致部分JVM堆,甚至其可执行页面被交换到磁盘。

        17.禁用交换有三种方法。首选选项是完全禁用交换。如果不想这么做,那么还有最小化交换与内存锁定两种方法,采用哪种方法取决于用户的环境。

        18.在开始应用于生产环境之前,必须考虑配置以下参数: · 禁用交换区

  • 增加文件描述符的数量
  • 确保足够的虚拟内存
  • 确保有足够的线程数上限
  • JVM DNS缓存设置
  • 临时目录不要挂载在noexec下

        19.如果一个Elasticsearch节点不能通过非环回地址与另一台机器形成集群,则认为它处于开发模式;如果它可以通过非环回 地址加入集群,则它处于生产模式。

        20.如果在Linux上,要通过最大线程数检查,必须将系统配置为允许Elasticsearch进程创建至少4096个线程。

        21.JVM提供了两种不同的JVM模式:client模式和server模式。client JVM针对启动时间和内存占用进行了优化,而server JVM针 对最大化性能进行了优化。两种虚拟机之间的性能差异可能很大。 JVM检查确保Elasticsearch必须以server模式启动。

        22.ignore_unavailable控制是否忽略不可用索引,包括不存在的索引或已关闭的索引。 可以设置为true或false。

        23.索引名称支持日期解析,这样能够搜索一个时间范围内或某几段时间内的索引,而不是搜索所有索引再筛选结果或维护别名。

        24.所有REST API都接受一个filter_path参数,该参数可用于减少 Elasticsearch返回的响应信息。

        25.为了获得更多的控制,可以在同一表达式中组合包含和排除过滤 器。在这种情况下,将首先应用排除过滤器,并使用包含过滤器再次 过滤结果。

        26.每当需要指定时间区间,例如对于超时参数时,时间区间必须指定单位,如表示2天的2d。

        27.在查询text或keyword字段时,fuzziness被解释为编辑距离,也就 是一个字符串需要更改的字符数,以使其与另一个字符串相同。

        28.Elasticsearch的数据复制模型是基于主备(primary-backup)模型的。我们称主分片为primary,称副本为replica。另外约定,集群中有若干个节点,其中只有一个是活跃的主节点,它负载管理集群,我们把它称为master。

        29.基本写模型:

primary遵循以下基本流程:

  • 验证传入操作,如果结构无效则拒绝该操作。
  • 在本地执行操作,即索引或删除相关文档。这还将验证字段的内容,并在需要时拒绝。
  • 将操作转发到当前同步副本组中的每个replica,如果有多个replica,这是并行完成的。
  • 一旦所有replica都成功地执行了操作并对primary作出了响应, primary就确认完成了请求并返回给用户。

        30.基本读模型:

  • 将读取请求解析到相关分片组。注意,由于大多数搜索将被发送到一个或多个索引,所以它们通常需要从多个分片中读取,每个分片表示数据的不同子集。
  • 从同步副本组中选择一个相关shard的活动分片。这可以是 primary,也可以是replica。默认情况下,Elasticsearch只需在分片之间循环搜索。
  • 向所选分片发送读取请求。
  • 将结果整合。请注意,在按ID查找的情况下,只有一个分片是相关的,可以跳过此步骤。

        31.由于primary首先完成写操作,然后复制分发请求到其他replica,所以并发读取可能在确认之前就已经看到了更改。

        32.默认情况下,数据存放到哪个分片,通过使用文档ID值的哈希值来控制。对于更显式的控制,可以传递哈希函数的种子值。

        33.为了兼顾系统写入的效率和可靠性,可以将索引操作配置为在继续操作之前等待一定数量的活动分片。如果所需数量的活动分片不可 用,则写入操作必须等待并重试,直到所需分片已启动或发生超时。 默认情况下,写入操作仅在继续之前等待primary完成。

        34.GET操作允许指定一组存储字段(store属性值为true),这些字段将通过传递stored_fields参数返回。如果未存储请求的字段,则将忽略它们。

        35.可以使用/{index}/_source/{id}仅获取文档的source字段,而不返回 任何其他内容。

        36.可以将refresh参数设置为true,以便在GET操作之前刷新相关的分片并使其可见。将其设置为true应慎重考虑,因为这可能导致系统负载过重,并减慢索引速度。

        37.delete_by_query操作在启动时会获取索引的一个快照,并使用内部版本控制删除找到的内容。这意味着,如果文档在获取快照的时间和处理删除请求的时间之间发生更改,则会出现版本冲突。如果不想因版本冲突而让它们中止,那么在URL上设置conflicts=proceed或在请求正文中设置conflicts:proceed。

        38.如果搜索或批量请求被拒绝, _delete_by_query按照默认策略重试被拒绝的请求(最多10次,指数下降)。达到最大重试次数限制会导致_delete_by_query中止,并在响应的failures中返回所有失败信息。已执行的删除操作仍然保持不变。

        39.可以使用任务API(_tasks)获取任何正在运行的_delete_by_query 的状态。

        40.查询更新API(_update_by_query)的功能是在不更改源的情况下对索引中的每个文档执行更新。https://www.cnblogs.com/hahaha111122222/p/12719660.html

        41.与_update_by_query类似,_reindex支持修改文档的脚本。与_update_by_query不同的是,脚本允许修改文档的元数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值