ElasticSearch Sorted Index 无法按预期使用多个分片

inf*_*mer 6 sorting indexing search elasticsearch

我有一个带有默认价格排序映射的弹性索引:

shop_prices_sort_index

    "sort" : {
      "field" : "enrich.price",
      "order" : "desc"
    },
Run Code Online (Sandbox Code Playgroud)

如果我插入 10 个文件:

100, 98, 10230, 34, 1, 23, 777, 2323, 3, 109
Run Code Online (Sandbox Code Playgroud)

并使用 /_search 获取结果。默认情况下,它按价格降序返回文档。

10230, 2323...
Run Code Online (Sandbox Code Playgroud)

但是,如果我将文档分发到 3 个分片中,那么相同的查询会返回一些其他产品序列:

100, 98, 34...
Run Code Online (Sandbox Code Playgroud)

我真的被困在这里,我不确定我是否遗漏了一些基本的东西,或者我是否需要任何额外的设置才能使排序索引正确运行。

PS:我也试过“路由”和“偏好”。但没有运气。非常感谢任何帮助。

Val*_*Val 5

配置索引排序时,您只需确保每个分片内的每个段都正确排序。索引排序的目标是在搜索过程中提供更多优化

由于 ES 的分布式特性,当你的索引有很多分片时,每个分片都会被正确排序,但你的搜索查询仍然需要明确使用排序

因此,如果您的索引设置包含以下内容以在索引时应用排序

"sort" : {
  "field" : "enrich.price",
  "order" : "desc"
}
Run Code Online (Sandbox Code Playgroud)

您的搜索查询还需要在查询时包含相同的排序规范

"sort" : {
  "field" : "enrich.price",
  "order" : "desc"
}
Run Code Online (Sandbox Code Playgroud)

通过使用索引排序,您在索引时会遇到一些开销,但最终您的搜索查询会更快一些。