ElasticSearch频繁更新

时间:2018-05-08 20:17:21

标签: elasticsearch

对于我们的搜索引擎替换,我们有一套相当困难的要求,它们如下所示。

  • 每个实例都有一个独特的架构,我们有多个客户端安装,我们无法控制它们具有不同的数据结构
  • 频繁更新,每个记录在单个操作中更新字段的情况并不少见。某些字段经常更新,其他字段永远不会更改
  • 我们的某些字段可能非常大(50mb +),但这些字段永远不会更改,在数据集中很少见。
  • 我们希望尽可能接近实时搜索

我们正在考虑将经常/频繁更新的字段制作成子文档。这个问题是我们有一组标签在我们想要近乎实时搜索的记录上频繁更改。我们的应用程序强烈期望在修改此数据时,搜索会立即反映出来。我们已经尝试过子文档,但他们似乎没有像我们对大型数据集那样快速更新。

所以问题如下:

  • 我是否有快速更新子文档的策略?也许是一个插件?现在我们只使用RESTFUL接口
  • 存储ES中不经常更改的数据但是将标记保存在数据库中会更好吗?可能在ES中创建一个将两者映射在一起的插件?这个插件会难吗?理想情况下,我们能够以布尔方式将我们的搜索混合在一起(标签+常规ES查询),包括存储在表格中的标签。

1 个答案:

答案 0 :(得分:0)

希望这对其他人有所帮助,这是我提出的解决方案。

  • 使用子/父文件
  • 有一个父母包含记录的静态信息,很少/永远不会改变(大部分数据被索引)
  • 为我想要编制索引的其他数据创建子文档,以便可以独立于主文档
  • 编制索引

由于我将要记录的记录数据拆分为静态和非静态文档,然后将非静态数据分解为更多的子文档,我能够创建高吞吐量索引器。要编制索引的记录总数被拆分为子块,然后进一步拆分为子文档类型。我会将这些块拆分为各种索引器实例,这些实例只会受到数据源吞吐量或ES群集的限制,以确定每秒可以索引多少文档。

这一切都是通过批量API完成的。保持静态数据远离频繁变化的数据允许频繁更改的数据非常快速地更新,并且此速度仅受可用硬件的限制。使用子文档子句和聚合来创建查询有点困难,但一切似乎都有效。

注释

  • 使用父/子文档会对性能造成影响,考虑到ES对我们以前的解决方案提供了什么,这对我们来说是一个非问题,但它可能会导致其他实现的问题。