匹配字符串时增加分数

时间:2017-09-15 22:43:18

标签: elasticsearch

我有一堆"filter": []的查询 然后是一堆评分函数:

"must": [ { "function_score": { "functions": [ ... ] } } ]

我试图让具有特定关键字的文档排名高于没有它的情况。

我尝试将其添加到我的functions数组中:

{
    "filter": {
        "match": {
            "[MY FIELD]": "[MY KEYWORD]"
        }
    },
    "weight": 1
}

但我认为它恰恰相反,它将一个低于1的系数添加到匹配的系数,因此使MY KEYWORD的文档排名更低。

我尝试搜索not方法以匹配所有没有MY KEYWORD的方法,但我在functions的上下文中找不到任何内容。我发现match_not但它在那里不起作用。

我的目标是,如果你有2个完全相同的文件,一个有MY KEYWORD而另一个没有,我想要一个有更高的分数。

谢谢。

1 个答案:

答案 0 :(得分:0)

我发现的一个解决方案是:

{
    "script_score" : {
        "script" : {
          "inline": "String tmp = null; for (a in doc['MY_FIELD']) {tmp = a;} return tmp == 'MY_KEYWORD' ? 1.0 : DECAY_VALUE",
          "lang": "painless"
        }
    },
    "weight": MY_WEIGHT
}

我使用的衰减值为0.7

,重量也是0.7。

MY_FIELD必须是type:keyword