有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

未编制索引的字段上的java部分更新

让我们考虑下面的情况——在“文章”文档中有两个字段-内容(String)和视图(int)。“视图”字段没有索引。“视图”字段包含本文的阅读次数信息

From official doc

We also said that documents are immutable: they cannot be changed, only replaced. The update API must obey the same rules. Externally, it appears as though we are partially updating a document in place. Internally, however, the update API simply manages the same retrieve-change-reindex process that we have already described.

但如果我们对未编入索引的字段进行特殊更新,elasticsearch会重新编入整个文档的索引吗?例如,我想在每次有人阅读某篇文章时更新视图。如果对整个文档重新编制索引,我将无法进行实时更新(因为这项操作太繁重)。因此,我将不得不延迟工作,例如每3-5-10分钟更新访客阅读的所有文章。还是我理解错了


共 (1) 个答案

  1. # 1 楼答案

    但是如果我们对未编入索引的字段进行特殊更新,会怎么样?elasticsearch会重新编入整个文档的索引吗

    是的,虽然views字段没有单独索引,但它是_source字段的一部分。_source字段包含为文档编制索引时发送给Elasticsearch的原始JSON,如果搜索过程中文档存在匹配项,则返回结果。_source字段用Lucene中的文档编制索引。在更新脚本中,您正在更改_source字段,以便对整个文档重新编制索引

    然后您可以评估以下策略吗。每次有人读到这篇文章,我都会向elastic发送更新。但是,刷新间隔I设置为30秒。如果在30秒的时间间隔内,大约1000名用户阅读了一篇文章,这种策略是否正常

    您仍在为1000个文档编制索引,1个文档将作为当前文档编制索引,999个文档将被标记为已删除并在下一次Lucene合并期间从索引中删除