Elasticsearch 查询从每个索引检索固定数量的文档

问题描述 投票:0回答:1

我有一个包含多个索引的 Elasticsearch 设置(例如 a、b、c、d、e 和 f)。我的目标是总共检索 20 个文档,每个索引恰好有 4 个文档。但是,如果任何索引的文档少于 4 个,我想从其他索引中填充剩余的文档。

例如:

a = 4
b = 4
c = 4
d = 4
e = 4
Total = 20

如果任何索引的文档少于 4 个:

a = 3
b = 4 or 5
c = 4 or 5
d = 4 or 5
e = 4 or 5
Total = 20

实现此目的的 Elasticsearch 查询或有效负载应该是什么?

目前的方法

{
    "index": [
        "_all"
    ],
    "body": {
        "query": {
            "match_all": {}
        },
        "size": 20,
        "sort": {
            "created_at": "desc"
        }
    }
}

感谢任何帮助或指导。

提前致谢!

elasticsearch elasticsearch-aggregation elasticsearch-dsl elasticsearch-query
1个回答
0
投票

我可能会使用 多搜索 API 来执行此操作并分别查询每个索引,如下所示:

POST /_msearch
{"index": "a"}
{"size": 10, "sort": {"created_at": "desc"}, "query" : {"match_all" : {}}}
{"index": "b"}
{"size": 10, "sort": {"created_at": "desc"}, "query" : {"match_all" : {}}}
{"index": "c"}
{"size": 10, "sort": {"created_at": "desc"}, "query" : {"match_all" : {}}}
{"index": "d"}
{"size": 10, "sort": {"created_at": "desc"}, "query" : {"match_all" : {}}}
{"index": "e"}
{"size": 10, "sort": {"created_at": "desc"}, "query" : {"match_all" : {}}}

另请注意,我为每个索引检索超过 4 个命中,对于索引命中少于 4 个的情况,您可以从另一个索引中选择另一个命中。

© www.soinside.com 2019 - 2024. All rights reserved.