如果doc ['someField']。value ==“ some”,则得分+30

时间:2018-08-08 12:56:50

标签: elasticsearch

我有文件:

{
  "_id": 111,
  "price": 1000,
  "color": "red",
}

我将Gauss函数与function_score一起使用,以按价格获取得分。 现在,如果color ==“ green”,我需要添加+30分数。最好不使用groovy脚本。 但是,如果颜色!=“绿色”,那么即使没有这些额外的30分得分,仍然可以得到该文档的结果。 有朝哪个方向看的想法?

谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用Constant Score为与该查询匹配的文档提供固定的分数,并将其放在should子句下,因此不是强制性的。

例如:

{
  "query": {
    "bool": {
      "should": [
        {
          "function_score": {
            "functions": [
              {
                "gauss": {
                  "price": {
                    "origin": "100",
                    "scale": "10"
                  }
                }
              }
            ]
          }
        },
        {
          "constant_score": {
            "filter": {
              "match": {
                "color": {
                  "value": "red"
                }
              }
            },
            "boost": 30
          }
        }
      ]
    }
  }
}