当前位置: 首页 > 面试题库 >

未索引字段的部分更新

龙志勇
2023-03-14
问题内容

让我们考虑以下情况-“文章”文档中有两个字段-
content(string)和views(int)。视图字段未建立索引。views字段包含此文章被阅读了多少次的信息。

来自官方文档:

我们还说过文件是不可变的:它们不能更改,只能替换。更新API必须遵守相同的规则。从外部看,似乎我们正在部分更新文档。但是,在内部,更新API仅管理与我们已经描述过的相同的检索-
更改-重新索引过程。

但是,如果我们对未索引字段进行部分更新该怎么办?Elasticsearch将为整个文档重新编制索引吗?例如-
我想在有人阅读某些文章时更新视图。如果整个文档都重新编制了索引,则无法进行实时更新(因为操作太繁琐)。因此,我将不得不延迟工作,例如,每3-5-10分钟更新访问者阅读的所有文章。还是我理解错了?


问题答案:

但是,如果我们对未索引字段进行部分更新该怎么办?Elasticsearch将为整个文档重新编制索引吗?

是的,虽然该views字段未单独索引,但它是该_source字段的一部分。该_source字段包含您在对文档建立索引时发送给Elasticsearch的原始JSON,并且如果在搜索过程中文档上存在匹配项,则返回结果。该_source字段在Lucene中的文档中建立了索引。在更新脚本中,您正在更改_source字段,因此整个文档将被重新编制索引。

然后,您可以评估以下策略吗?
每当有人阅读该文章时,我都会向弹性发送更新。但是refresh_interval我设置为30秒。如果在30秒的间隔内大约有1000位用户阅读了一篇文章,此策略是否正常?

您仍在索引1000个文档,其中1个文档将被索引为当前文档,下一个Lucene合并期间将对999个文档进行索引,标记为已删除并从索引中删除。



 类似资料:
  • 我使用的是Laravel,我试图使用HasOne::create方法从数组中创建一个相关记录。它插入相关记录,但不向主模型的外部字段添加新id。我做错了什么? 谢谢 关系工作正常,指定所有字段。由- var_dump结果-null 此外,$data['地址']包含有效数据,在地址模型中指定为可填充数据,address_id在联系人模型中可填充数据 UPD: 联系类: 地址类: $data['地址'

  • 问题内容: 我在对象上创建索引,并希望既可以进行完整短语搜索也可以进行部分匹配。该类型称为“发送方”,简化的索引创建如下所示: 这样做的目的是对“名称”字段中的值建立索引两次:一次是不拆分字段中的各个单词(name.full),一次是拆分单词(name.name)。 我有一个已建立索引的文档,其名称字段设置为“ Danny Watson博士”。我希望在执行术语查询(根据文档未分析其查询字符串)时发

  • 问题内容: 我正在探索EKL堆栈并遇到问题。 我已经生成了日志,将日志转发到logstash,日志采用JSON格式,因此仅使用Logstash配置中的JSON过滤器将它们直接推入ES,连接并启动指向ES的Kibana。 Logstash配置: 现在,我已经为每天的日志创建了索引,而Kibana高兴地显示了来自所有索引的所有日志。 我的问题是:日志中有许多字段未启用/未在Kibana中进行过滤的索引

  • 问题内容: 您是否需要为Oracle数据库中按字段分组的字段创建索引? 例如: 我正在测试我为上面创建的索引,与此查询唯一相关的索引是为field_two创建的索引。在任何其他字段上创建的其他单字段索引或组合索引将不会用于上述查询。这听起来正确吗? 问题答案: 可能是正确的,但这取决于您拥有多少数据。通常,我会为我在GROUP BY中使用的列创建索引,但是在您的情况下,优化器可能已经决定,在使用f

  • 问题内容: 如何在DATETIME字段的日期部分创建索引? TranDateTime用于保存交易发生的日期和时间 我的表中有超过1,000,000条记录,并且该语句 花费很长时间。 编辑: 看看上“这个博客帖子为什么可以和应该避免MySQL的DATETIME ” 问题答案: 如果我没记错的话,这将运行整个表扫描,因为您正在通过函数传递列。MySQL将乖乖地为每一列运行该函数,而绕过索引,因为查询优

  • 在我的一个项目中,我有一个表,其中保存了某种设备的固件更新信息。最初,任何固件更新进程都处于排队状态。更新过程可能有其他状态值,例如正在进行、已完成、失败。对于单个设备,可能存在状态为“已完成”和“已失败”的多行(已完成的更新过程,最终状态!)。但在任何时候,处于排队或正在进行状态的每个设备都必须只有一个更新过程——新固件的推出应该只适用于没有“活动/非最终”更新过程的设备。我试图用Postgre