当我通过路由密钥在弹性搜索中搜索时,它也返回另一个路由密钥的结果。
路径:索引2022/搜索?路由=10
{
"from": 0,
"size": 5000,
"timeout": "15m",
"query":
{
"bool":
{
"must":
[
{
"query_string":
{
"query": "*",
"fields":
[
"content^1.0"
]
}
}
]
}
}
}我用路由密钥10搜索结果,但弹性给出了路由密钥3的结果。
发布于 2022-05-05 06:47:21
路由密钥的目标仅仅是定义文档将存储在哪个碎片中。路由密钥被散列的值和结果是一个碎片索引。
如果您有1M文档和4个碎片,那么每个碎片都将包含大约250 K的文档。所有这些文档都可能有不同的路由键,但它们的散列总是解析为主碎片的数量(即0、1、2和3)。
因此,在您的示例中,具有路由键10和3的文档具有一个散列,它们都解析为相同的主碎片索引,这就是为什么在同一个碎片中找到它们的原因。
使用路由密钥进行搜索的想法是在较少的碎片中进行搜索。假设您有4个碎片,并且您知道搜索的路由密钥为10 (例如,它可以是租户id、客户id等),所以您指定了routing=10,然后搜索将只在单个碎片中进行,而不是对所有4个碎片进行搜索,这通常会产生更快的查询响应时间。
https://stackoverflow.com/questions/72122836
复制相似问题