我正在使用ES v7.3,并且正在使用父子映射,所以我想知道我可以通过什么方式限制父文档的子文档数量。假设我有一个父级“ p1”,那么我希望该父级不能与之关联的子文档超过100个,并且如果对更多文档进行了索引,则旧的子文档将被删除而新的文档将被索引,但限制应为100个子文档。
PUT test/
{
"mappings": {
"properties": {
"data": {
"type": "join",
"relations": {
"parent": ["child1", "child2", "child3"]
}
}
}
}
}
答案 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插件能够执行工作流程中的特定步骤。