为elasticsearch中的特定范围赋予更高的优先级

时间:2016-01-14 09:34:03

标签: elasticsearch

以下是我的索引

的示例文档
{
"name" : "Neil Buckinson",
"insuranceType" : "personal",
"premiumAmount": 4000,
"age": 36
}

我想提供比其他文件高出3500到4500优先级的文件。我怎么能在elasticsearch中做到这一点?

2 个答案:

答案 0 :(得分:1)

这很简单。只需使用Bool Query并在should子句中添加条件。

  

bool查询采用更多匹配更好的方法,因此得分   从每个匹配的mustshould子句将被添加到一起   为每个文档提供最终_score

GET /index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ],
      "should": [
        {
          "range": {
            "premiumAmount": {
              "gte": 3500,
              "lte": 4500
            },
            "boost": 2
          }
        }
      ]
    }
  }
}

只需将当前查询放在must子句中,而不是match_all

should表示此条件是可选的,但如果它符合您的条件,则会提升您的文档 这就是你正在寻找的东西。

答案 1 :(得分:1)

我想说更好的方法是使用过滤函数的函数得分查询 -

{
  "query": {
    "function_score": {
      "functions": [
        {
          "weight": 100,
          "filter": {
            "range": {
              "premiumAmount": {
                "gte": 3500,
                "lte": 4500
              }
            }
          }
        }
      ]
    }
  }
}