ElasticSearch 中频繁变化的字段的数据模型

And*_*ite 7 elasticsearch

处理 ElasticSearch 文档中频繁更改的字段的最佳方法是什么?根据他们关于部分更新文档......

然而,在内部,更新 API 只是管理我们已经描述过的相同的检索-更改-重新索引过程。

特别是,考虑到索引字段的数量和一些必须分析的文本字段的大小,当文档的索引可能很昂贵时,应该怎么做?

作为一个具体的例子,使用 SO 的观点和对问题和答案的投票计数。仅仅为了更新这些值而重新索引文本正文似乎很昂贵。

cof*_*ict 3

也许你不应该更新得这么频繁。也许像投票/观点这样的事情应该只在 ES 中定期更新,而像答案/问题这样更关键的字段应该立即推送。考虑一下什么是最重要的,看看是否可以避免某种程度的陈旧。

ElasticSearch 非常适合文本搜索,但我不认为 ES 完全支持 SO(或类似的应用程序)。它可能是一个有用的工具,用于搜索 SO 上的答案/问题,或用于内部应用程序(如日志/事件分析)。但也许使用不同的解决方案可以更好地完成实际的数据服务?也许它应该由 Cassandra 来完成大部分工作?你明白了...

如果你想使用 ES 作为你的需求的解决方案,并且你必须经常更新,你绝对可以考虑已经提到的父/子模型。当然,该方法将需要更多的内存/磁盘空间,并且在查询总计时会占用更多的CPU/时间。另一种方法是让父级存储可搜索字段,并让子级保存元数据(不分析子级的字段)。这将允许您进行频繁的更新,而无需进行昂贵的重新索引,因为没有任何内容可供索引。

您还可以考虑我上面提到的内容,看看您是否可以摆脱一些陈旧的情况。这也可以通过多种方式来完成。您可以按更改类型限制请求,或更改刷新/刷新间隔,或者在批量发送更新时考虑重复数据删除更新。这些也都有各自的缺点...