【问题标题】:Increase score if match string如果匹配字符串则增加分数
【发布时间】:2017-09-16 06:44:58
【问题描述】:

我有一堆"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,一个没有,我希望一个带有更高的分数。

谢谢。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    我找到的一个解决方案是:

    {
        "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

    【讨论】:

      猜你喜欢
      • 2020-02-04
      • 2018-08-25
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      相关资源
      最近更新 更多