通过提供另一个路由键数据的路由键在弹性搜索中搜索
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 个分片,这通常会产生更快的查询响应时间。
当我在 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 个分片,这通常会产生更快的查询响应时间。