0

我想同时按非嵌套字段和嵌套对象/列表中的字段进行过滤。非嵌套字段是日期范围。

示例数据结构如下

{
    "order_id": "83",
    "order_date": "01/05/2018 17:53:39",
    "trans":
    [
        {
            "item_id" : "1",
            "amount": 5000.0,
        },
        {
            "item_id" : "2",
            "amount": 5000.0
        },
        {
            "item_id" : "3",
            "amount": 5000.0,                        
        }
    ]
}

要按 item_id 过滤,这没有问题:

{
    "size": "0",
    "query": {
        "nested": {
            "path": "trans",
            "query": {
                "bool": {
                    "must": [
                        {
                            "term": {
                                "trans.item_id": {
                                    "value": "3"
                                }
                            }
                        }
                    ]
                }
            }
        }
    }
}

要按 order_date 过滤,下面的查询可以正常工作

{
    "query": {
        "bool": {
            "filter": [
                {
                    "range": {
                        "order_date": {
                            "gte": "2020-04-15",
                            "lte": "2020-04-15"
                        }
                    }
                }
            ]
        }
    }
}

关于如何将两者结合起来的任何提示?

4

1 回答 1

1

您可以使用bool组合这些查询

如果不希望查询影响分数,请使用 [过滤器],否则您将删除过滤器

  "query": {
    "bool": {
      "filter": {
        "bool": {
          "must": [
            {
              "nested": {
                "path": "trans",
                "query": {
                  "bool": {
                    "must": [
                      {
                        "term": {
                          "trans.item_id": {
                            "value": "3"
                          }
                        }
                      }
                    ]
                  }
                }
              }
            },
            {
              "range": {
                "order_date": {
                  "gte": "2020-04-15",
                  "lte": "2020-04-15"
                }
              }
            }
          ]
        }
      }
    }
  }
于 2020-04-16T02:43:00.160 回答