首页 > 解决方案 > 使用 Elasticsearch 组合查询

问题描述

我正在尝试使用预期标准(activationDate在范围内15988896001602051579someFlag=执行搜索true

下面是我尝试过的查询,但它不会产生任何带有someFlag=的记录true(即使大小很大,例如 5000)。我的 Elasticsearch 确实有很多带有someFlag=的记录true

总共大约有 3000 个文档,此查询返回大约 280 个文档。

{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "activationDate": {
              "gte": 1598889600
            }
          }
        },
        {
          "range": {
            "activationDate": {
              "lte": 1602051579
            }
          }
        }
      ],
      "should": {
        "match": {
          "someFlag": true
        }
      }
    }
  },
  "from": 1,
  "size": 1000
}

我错过了什么吗?

标签: elasticsearch

解决方案


将 must 替换为 should 并将 minimum_should_match=1 设置为 OR 查询,如果任何记录仅满足其中一个 ceiterias 就可以了。接下来将两个范围标准减少到一个,将 gte 和 lte 结合起来。


推荐阅读