通过提供另一个路由键数据的路由键在弹性搜索中搜索

Searching in elastic search by a routing key providing data of another routing key also

当我在 elasticsearch 中通过路由键搜索时,它也返回另一个路由键的结果。

路径:Index_2022/_search?routing=10

{
    "from": 0,
    "size": 5000,
    "timeout": "15m",
    "query":
    {
        "bool":
        {
            "must":
            [
                {
                    "query_string":
                    {
                        "query": "*",
                        "fields":
                        [
                            "content^1.0"
                        ]
                    }
                }
            ]
        }
    }
}

我正在使用路由键 10 搜索结果,但 elastic 也给出了路由键 3 的结果。

路由键的目的只是定义文档将存储在哪个分片中。 routing key is hashed 的值和结果是分片索引。

如果您有 1M 文档和 4 个分片,那么每个分片将包含大约 ~250K 文档。所有这些文档可能有不同的路由键,但它们的哈希总是解析为主分片的数量(即 0、1、2 和 3)。

因此,在您的情况下,具有路由键 10 和 3 的文档有一个散列,它们都解析为相同的主分片索引,这就是为什么您在同一个分片中找到它们。

使用路由键搜索背后的想法是在较少数量的分片内搜索。假设您有 4 个分片,并且您知道要搜索的内容的路由键为 10(例如,它可能是租户 ID、客户 ID 等),因此您指定 routing=10 然后搜索将仅在单个分片内发生,而不是搜索所有 4 个分片,这通常会产生更快的查询响应时间。