Elasticsearch会更改已过滤查询的分数

时间:2015-09-07 11:31:07

标签: elasticsearch

我的映射看起来像:

"foo" : {
    "name" : {
        "type" : "string",
    },

    "points": {
        "type" : "double"
    }
}

我们目前正在做的是使用过滤查询来搜索名称。 除此之外,我们现在想要根据包含的内容来改变每个结果的分数。

因此,如果点数为3.0,我们希望_score + 3等等。

查询可能类似于:

{
    "from": 0,
    "size": 50,
    "query": {
        "filtered": {
            "query": {
                "match_all": {}
            },
            "filter": {
                //filters
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用function_score query来实现此目的。它很简单,就像这样:

{
  "query": {                                 
    "function_score": {
      "filter": {                            <--- your filters go in here
         //your filters
      },
      "boost_mode": "sum",                   <--- the script score will be summed with the query score
      "script_score": "doc.points.value"     <--- script score returns the value of the points field
    }
  }
}

由于您只有一个功能,因此也可以使用默认的boost_mode(即multiply)并让脚本分数直接返回总和分数:

{
  "query": {                                 
    "function_score": {
      "filter": {                                     <--- your filters go in here
         //your filters
      },
      "script_score": "_score + doc.points.value"     <--- script score returns the value of the points field
    }
  }
}