Фильтр Elasticsearch по диапазону дат и другим полям - PullRequest
0 голосов
/ 31 октября 2019

У меня есть запрос на группирование данных по дате и другим полям, и я хочу отфильтровать его по дате и диапазону электронной почты, я пробовал фильтровать только по дате, и он работал, после применения запроса к электронной почте он также работает, но онпоказывает все данные. это мой запрос выглядит так:

{
                    "_source": ["user_email","shipping_address.zipcode","eventtime"],
                    "query" : {
                        "bool":{
                            "filter": {
                                "range": {
                                    "eventtime":{
                                        "gt": start_date,
                                        "lt": end_date
                                    }
                                }
                            },
                            "should":{
                                "match_phrase_prefix" : {
                                    "user_email": "christea2045@yahoo.com"
                                }
                            }
                        }
                    },                    
                    "aggs": {
                        "group_by_date":{
                            "date_histogram":{
                                "field" : "eventtime",
                                "interval" : "1d"
                            },

                            "aggs":{
                                "group_shipzip":{
                                    "terms":{
                                        "field": "shipping_address.zipcode.keyword"
                                    }
                                }
                            }
                        }

                    }
                }

1 Ответ

0 голосов
/ 31 октября 2019

Вам необходимо добавить диапазон и адрес электронной почты в обязательном предложении

 "must": [
            {
               "range": {
                           "eventtime":{
                                        "gt": start_date,
                                        "lt": end_date
                                    }
                                }
                            },
                            {
                              "match_phrase_prefix": {
                                                     "user_email": "abc1@yahoo.com"
                                                    }
                            }
                          ]

В вашем запросе только часть фильтра возвращает результат. Так как электронная почта включена в случае необходимости, она будет возвращать документ, даже если совпадений нет.

Если вы выполняете полнотекстовое сопоставление в user_email, тогда лучше использовать термин запрос в поле ключевого слова

{
          "term": {
            "user_email.keyword": {
              "value": "abc1@yahoo.com"
            }
          }
  }
``
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...