嵌套对象的{Elasticsearch数据模式

时间:2017-04-19 06:35:29

标签: elasticsearch elasticsearch-5

我正在构建一个跨越多种类型关联对象的Elasticsearch索引。

我尝试了多种方法,但我似乎无法在性能,可扩展性和匹配产品要求之间找到适当的平衡。

以下是精简数据模型:

user
* id
* email
* created_at
...

has many:

  associated_1
  * type
  * created_at
  ...


  associated_2
  * type
  * created_at
  ...

目标是运行一个查询:

  • 返回用户,
  • email过滤,
  • associated_1 type
  • 过滤
  • associated_2 created_at排序。

我尝试了几种方法。

  1. 嵌套文件。由于user具有一定程度的流失(更新),一些嵌套对象,因此无法真正发挥作用。这意味着要对很复杂的对象进行重新索引。
  2. 家长/孩子。这有效,但也会导致数据保留问题,请参阅下文。
  3. 单独索引。到目前为止,存储数据的最佳方式 - 多个索引,每个对象的索引。对于这种方法,除了在ES上拍摄多个查询然后以某种方式合并和排序结果之外,我还没有真正找到一种使用多级过滤和排序来运行查询的方法。但这似乎不具备可扩展性。
  4. 为了增加另一个复杂程度 - 我还需要在一段时间后退出数据。主user对象应该始终位于索引中,而关联对象有一个TTL(我用日常索引做TTL)。

    我首选的解决方案是3,但我不知道如何查询。 替代解决方案是2,但这会增加大量数据重复,因为我需要将user对象复制到每个每日索引以维持父/子关联。

    除了Elasticsearch之外,我还对其他搜索/分析引擎开放。

    感谢任何帮助/意见/建议!

0 个答案:

没有答案