ElasticSearch能否实现分块排序

Zac90 发布于 2016/01/28 10:40
阅读 777
收藏 0

在指定按某个字段排序时,ES会忽略相关性,有没有什么方式,能在一个检索请求中,让结果分块排序呢?

举个例子,现在想按价格升序排序,但我想让满足条件A的产品都排到前面,也就是说,满足条件A的先按价格升序排在前面,而不满足条件A的再按价格升序排在后面,如何在一次请求中实现?

不要说分多次请求……对目前的逻辑来讲,那样会导致很多潜在问题。

以下是问题补充:

@Zac90:如果可以的话,在REST请求或Java代码中怎么写? (2016/01/28 11:17)
加载中
0
Altman
Altman
给A产品更高的score不就行了?
Altman
Altman
回复 @verra : 那我就不知道了
Zac90
Zac90
我想知道具体怎么写这个逻辑,怎么指定排序的优先级? 指定字段排序时,貌似会忽略打分啊。
0
杨子江
杨子江

可以实现,需要使用 function_score 或者 script_score 功能。

大概的原理是,es允许你使用相关度 _score ,以及其他存储于索引库的可计算字段来实现自己的排序逻辑;按照你的描述,我理解是要做数据归一化后的hash排序,即按照某个条件先hash分组,然后在每一组内按照某个排序规则来排序。

写代码的话,一般是用groovy,当然es也支持mavel和python等脚本。

返回顶部
顶部