ES Range Query для не вложенных объектов и условия запроса для вложенных объектов - PullRequest
0 голосов
/ 15 апреля 2020

Я хотел бы отфильтровать как не вложенное поле, так и поле во вложенном объекте / списке. Не вложенное поле - это диапазон дат.

Пример структуры данных ниже

{
    "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"
                                }
                            }
                        }
                    ]
                }
            }
        }
    }
}

Чтобы отфильтровать по дате заказа, приведенный ниже запрос работает без проблем

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

Любые подсказки о том, как я могу объединить 2?

1 Ответ

1 голос
/ 16 апреля 2020

Вы можете объединить эти запросы, используя 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"
                }
              }
            }
          ]
        }
      }
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...