如何在将这些字段的值相互比较的同时按多个字段对elasticsearch进行排序?

时间:2018-02-07 16:23:34

标签: sorting elasticsearch elasticsearch-5

假设我有三个对象

[
    {
        'name' : 'Apple',
        'popularityFoo': 100,
        'popularityBar': 80,
        'popularity': 40,
    },
    {
        'name' : 'Banana',
        'popularityFoo': 50,
        'popularityBar': 90,
        'popularity': 50,
    },
    {
        'name' : 'Cherry',
        'popularityFoo': 60,
        'popularityBar': 60,
        'popularity': 60,
    }  
];

我的默认排序是受欢迎程度,返回Cherry (60), Banana (50), Apple (40) 如果用户具有首选类别,则它将首先按该类别流行度指数排序,然后再回归到流行度。因此,如果我最喜欢的类别是Foo,则返回Apple (100), Cherry (60), Banana (50),对于类别栏,搜索返回Banana (90), Apple (80), Cherry (60)

现在我的问题:如果我的用户喜欢两者 Foo和Bar,我如何在排序时将不同的受欢迎度值相互比较,以便得到结果Apple (100), Banana (90), Cherry (60)?我索引错了吗?我应该采用不同的方法吗?

我有20个类别,我的用户有1-3个喜欢的类别。

2 个答案:

答案 0 :(得分:1)

使用脚本进行条件排序如下:

{
    "sort" : {
        "_script" : {
            "type" : "number",
            "script" : {
                "lang": "painless",
                "inline": "doc['popularityFoo'].value > doc['popularityBar'].value ? doc['popularityFoo'].value : doc['popularityBar'].value"
            },
            "order" : "desc"
        }
    }
}

答案 1 :(得分:0)

感谢Mohammad's answer提示,我解决这个问题的方法是使用setcookie("mpsClient_id","", time() - 3600,"../"); $_COOKIE["mpsClient_id"] =""; unset($_COOKIE["mpsClient_id"]); 为每个其他类别嵌套函数。

Math.max(double a, double b)