从弹性搜索中的内部查询中获取值列表

问题描述

我有一个类似的文档

{
 "order_id" : 987,"product_id": 1234,"order_date": "2020-10-01","day of week": "Monday","currency": "USD"
..
},{
 "order_id" : 789,"product_id": 4321,"order_date": "2020-11-01","currency": "USD"
..
}

现在,我要保存的所有order_id的所有列表/数组

  1. 货币不为空
  2. “星期几”是“星期一”

我正在搜索order_id的“条款”中的内部查询

{
  "size": 0,"query": {
    "bool": {
      "filter": [
        {
          "terms": {
            "order_id": [
              **{
                "match": {
                  "day of week": "Monday"
                }
              },{
                "exists": {
                  "field": "currency"
                }
              }**
            ]
          }
        },{
          "exists": {
            "field": "order_date"
          }
        }]
      }
    }
..
..
}

我要查询所有order_id的列表,而不是现有的内部查询(粗体)。

解决方法

在下面的搜索查询中进行尝试,并参考Boolean query上的ES官方文档

查询以查找包含所有order_id的列表/数组

  1. 货币不为空
  2. “星期几”是“星期一”

添加具有相同索引数据的工作示例并采用默认映射。

搜索查询:

{
    "query": {
        "bool": {
            "filter": [
                {
                    "term": {
                        "day of week.keyword": "Monday"
                    }
                },{
                    "exists": {
                        "field": "currency"
                    }
                }
            ]
        }
    }
}

搜索结果:

"hits": [
      {
        "_index": "my-index","_type": "_doc","_id": "1","_score": 0.0,"_source": {
          "order_id": 987,"product_id": 1234,"order_date": "2020-10-01","day of week": "Monday","currency": "USD"
        }
      },{
        "_index": "my-index","_id": "2","_source": {
          "order_id": 789,"product_id": 4321,"order_date": "2020-11-01","currency": "USD"
        }
      }
    ]