ElasticSearch中频繁更改的字段的数据模型

时间:2014-08-21 14:33:20

标签: elasticsearch

处理ElasticSearch文档内频繁更改的字段的最佳方法是什么?根据{{​​3}} ...

  

然而,在内部,更新API只管理我们已经描述过的相同的retrieve-change-reindex流程。

特别是,考虑到索引字段的数量和某些必须分析的文本字段的大小,在索引文档时可能需要做些什么呢?

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

3 个答案:

答案 0 :(得分:2)

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

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

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

你也可以考虑我上面提到的内容,看看你是否可以逃脱一些陈旧性。这也可以通过多种方式完成。您可以按更改类型限制请求,或更改刷新/刷新间隔,或者如果要批量发送更新,请考虑重复删除更新。这些也有它们的缺点......

答案 1 :(得分:1)

我认为处理更改的最佳方法是拆分文档(您可以使用父子关系,或只是父ID),并使文档尽可能小(将可更改部分移动到新类型)。

这可以是满足您的要求的方式,比如SO,

您可以为此使用多种类型,请考虑此帖子(视图和投票计数)。

  1. 为帖子,视图和投票创建一个类型。
  2. 对于帖子,将文档索引为发布类型(索引帖子ID,标题说明标记),并且对于该帖子的每个视图,您都可以将文档编入索引查看类型(带有帖子的ID),如果投票,你可以用投票类型来投票(没有投票,发布的id和你需要的其他信息[如正面或负面标志])。< / LI>
  3. 因此,要获取帖子的观看次数,请使用帖子ID的过滤器,并在视图类型中获取文档计数
  4. 要获得选票,请使用统计汇总进行投票,或使用条款汇总,然后使用统计汇总获取正数和负数票。
  5. 这是我认为最好的方式,也可能有其他意见。

    由于

答案 2 :(得分:0)

我所做的是我使用像mongo或mysql这样的数据库来存储经常更新的属性,并使用弹性搜索来存储文档以进行文本搜索。

示例:我想保留有关图书及其内容的数据,并且我还希望保留视图的总数,每次用户查看文档时都会对文档进行更新和重新编制索引。