【发布时间】:2016-12-01 10:15:28
【问题描述】:
没有脚本,我需要根据评分对记录进行排序。所有记录都存在系统评级,但用户评级可能存在也可能不存在。如果确实存在用户评分,我想在排序中使用该值而不是系统评分,用于该特定记录并且仅用于该记录。
尝试查看missing 设置,但它只允许_first、_last 或自定义值(将用于缺少文档作为排序值):
{
"sort" : [
{ "user_rating" : {"missing" : "_last"} },
],
"query" : {
"term" : { "meal" : "cabbage" }
}
}
...但是当user_rating 丢失时,有没有办法指定自定义值应该是system_rating?
我可以做到以下几点:
query_hash[:sort] = []
if user_rating.exist?
query_hash[:sort] << {
"user_rating" => {
"order": sort_direction,
"unmapped_type": "long",
"missing": "_last",
}
}
end
query_hash[:sort] << {
"system_rating" => {
"order": sort_direction,
"unmapped_type": "long",
}
}
...但是无论user_rating 的值如何,这始终会将用户评分记录排在最前面。
我知道脚本可以让我这样做,但我们不能使用脚本。有可能吗?
【问题讨论】:
-
编写脚本或在索引时构建一个自定义字段,该字段将包含已构建的排序值。
-
很遗憾,@andrei-stefan,我相信你是对的。在下面添加您的评论作为答案,如果没有其他答案,我会在一两天后接受。
标签: ruby sorting elasticsearch