java - 未索引字段的部分更新

标签 java elasticsearch

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

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 会重新索引整个文档吗?例如 - 我想在每次有人阅读某篇文章时更新 View 。如果重新索引整个文档,我将无法进行实时更新(因为操作量太大)。因此,我将不得不延迟工作,例如,每 3-5-10 分钟更新一次访问者阅读过的所有文章。还是我理解有误?

最佳答案

但是如果我们对未索引的字段进行局部更新会怎么样 - elasticsearch 会重新索引整个文档吗?

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

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

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

关于java - 未索引字段的部分更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28937946/

相关文章:

java - 在对象中设置字节字段

java - 如何将 html 图像添加到 velocity 模板文件中以发送电子邮件?

elasticsearch - 如何按ID中的文档对Elasticsearch进行排序?

elasticsearch - Elasticsearch-执行多字段最大聚合

php - Elasticsearch PHP fatal error :未捕获的TypeError:参数1

django - 将django-elasticsearch-dsl与AWS ElasticSearch结合使用-引发HTTP_EXCEPTIONS.get(status_code,TransportError)

java - LayoutInflater 是如何工作的?

提供完美哈希的 Java 库?

java - 计算Spring Job执行时间

python - 我的 Scrapy/Elasticsearch 脚本返回 "Unable to serialize"错误