ElasticSearch搜索查询中的多个条件

时间:2018-06-21 13:32:48

标签: elasticsearch

我需要使用以下规则构建搜索查询。

  1. 获取所有具有列/节点active = true的数据
  2. 获取列/节点为active = false且已使用一周的所有数据。

例如,如果我在索引中有1000条记录,其中70%的记录具有active = true,而30%的记录具有active = false。在30%的记录中,有10%最近更新。因此,我只需要提取80%的记录,即70%(active = true)+ 10%(active = false)。

我尝试使用过滤器查询,但是它只返回结果的10%,即仅满足规则2,即使我在应阻止的规则中提到了规则1,也不接受。

   {
  "query": {
    "bool": {
      "filter": {
        "bool": {
          "must": [
            {
              "range": {
                "UpdatedOn": {
                  "gte": "now-7d/d",
                  "lte": "now/d"
                }
              }
            },
            {
              "match": {
                "Active": "false"
              }
            }
          ]
        }
      },
      "should": [
        {
          "match": {
            "Active": "true"
          }
        }
      ]
    }
  }
}

ElasticSearch 5.4版

谢谢。

1 个答案:

答案 0 :(得分:2)

您需要这样做:

{
  "query": {
    "bool": {
      "minimum_should_match": 1,
      "should": [
        {
          "match": {
            "Active": "true"
          }
        },
        {
          "bool": {
            "filter": [
              {
                "range": {
                  "UpdatedOn": {
                    "gte": "now-7d/d",
                    "lte": "now/d"
                  }
                }
              },
              {
                "match": {
                  "Active": "false"
                }
              }
            ]
          }
        }
      ]
    }
  }
}