我可以通过任何方式限制Elasticsearch的父子映射中的子文档数吗?

时间:2019-09-03 09:43:44

标签: elasticsearch

我正在使用ES v7.3,并且正在使用父子映射,所以我想知道我可以通过什么方式限制父文档的子文档数量。假设我有一个父级“ p1”,那么我希望该父级不能与之关联的子文档超过100个,并且如果对更多文档进行了索引,则旧的子文档将被删除而新的文档将被索引,但限制应为100个子文档。

PUT test/
{
  "mappings": {
    "properties": {
        "data": {
              "type": "join",
              "relations": {
                  "parent": ["child1", "child2", "child3"]
              }
        }
    }
}
}

1 个答案:

答案 0 :(得分:0)

我不知道您可以设置有关最大大小和通过映射自动删除的特定信息。

但是,您可以实现一个logstash过滤器,该过滤器检查当前子文档数量的大小,如果数量已经等于100,则对集群执行一些REST调用。

我从未遇到过这样的用例,但我想为您提供一些解决方法:

1。)通过Logstash的elasticsearch过滤器插件执行parent_id查询

parent_id documentation中所述,此查询“返回已加入特定父文档的子文档”。

因此,使用父文档的ID,您应该能够在过滤器实现中获取所有子文档。有关使用方法,请参见elasticsearch filter plugin documentation。这样,您就可以通过ruby代码插件确定子文档的数量。

2。)检查当前子文档的数量是否等于100

3。)如果2.)评估为true,请调用delete_by_query REST API

要为新的子文档建立索引而又不超过100个子文档的最大阈值,则必须删除以前建立索引的子文档。因此,您可以使用logstash的http filter plugin来调用delete_by_query API,并使用确切的查询来删除以前建立索引的文档。

4。)通过elasticsearch输出插件为新文档建立索引

有关如何从logstash索引事件的信息,请参见Elasticsearch output plugin

因此,正如我在一开始所说的那样,我并不完全知道这种方法是否会产生预期的结果。但我会尝试一下,因为我提到的Logstash插件能够执行工作流程中的特定步骤。