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:我也试过“路由”和“偏好”。但没有运气。非常感谢任何帮助。
配置索引排序时,您只需确保每个分片内的每个段都正确排序。索引排序的目标是在搜索过程中提供更多优化
由于 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)
通过使用索引排序,您在索引时会遇到一些开销,但最终您的搜索查询会更快一些。