在指定按某个字段排序时,ES会忽略相关性,有没有什么方式,能在一个检索请求中,让结果分块排序呢?
举个例子,现在想按价格升序排序,但我想让满足条件A的产品都排到前面,也就是说,满足条件A的先按价格升序排在前面,而不满足条件A的再按价格升序排在后面,如何在一次请求中实现?
不要说分多次请求……对目前的逻辑来讲,那样会导致很多潜在问题。
在指定按某个字段排序时,ES会忽略相关性,有没有什么方式,能在一个检索请求中,让结果分块排序呢?
举个例子,现在想按价格升序排序,但我想让满足条件A的产品都排到前面,也就是说,满足条件A的先按价格升序排在前面,而不满足条件A的再按价格升序排在后面,如何在一次请求中实现?
不要说分多次请求……对目前的逻辑来讲,那样会导致很多潜在问题。
可以实现,需要使用 function_score 或者 script_score 功能。
大概的原理是,es允许你使用相关度 _score ,以及其他存储于索引库的可计算字段来实现自己的排序逻辑;按照你的描述,我理解是要做数据归一化后的hash排序,即按照某个条件先hash分组,然后在每一组内按照某个排序规则来排序。
写代码的话,一般是用groovy,当然es也支持mavel和python等脚本。