过滤然后在ElasticSearch中按查询排序结果

时间:2014-12-31 20:57:56

标签: sorting search elasticsearch

ElasticSearch中是否有办法运行布尔过滤器,然后在不进一步重新搜索的情况下,根据多字段查询对结果进行排序/排序?

例如:使用status_id = 1(过滤器​​)获取所有项目,然后使用关键字" red car" (namedescription包含这些关键字的文档是第一个,没有文档的文档是最后一个文档。

1 个答案:

答案 0 :(得分:1)

你可以使用bool查询 - 根据应该的条件 -

  

子句(查询)应出现在匹配的文档中。在没有must子句的布尔查询中,一个或多个should子句必须与文档匹配。可以使用minimum_should_match参数设置要匹配的最小条件子数。

在我们的例子中,因为有必须和它的数字匹配,所以不会计算得分值。但是那时的条件将仅用于计算分数 -

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "status_id": 1
          }
        }
      ],
      "should": [
        {
          "multi_match": {
            "query": "red car",
            "fields": [
              "subject",
              "message"
            ]
          }
        }
      ]
    }
  }
}