агрегация elasticsearch со сравнением дат и вычислением

Привет, я новичок в elasticsearch. Мне нужно получить агрегацию со сравнением дат и фильтром динамического диапазона.

Например, мне нужно получить количество документов, где документ created_at на 1 неделю раньше их идентификационной_даты.

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

       "aggs": {
            "identified": {
                "terms": { 
                    "script": "doc['created_at'].value > (doc['identification_date'].value - diff_date) 
                               && doc['created_at'].value < doc['identification_date'].value",
                    "params": {
                        "diff_date": 604800
                    }
                }
            }
        }

Спасибо, что нашли время помочь.


person Mido    schedule 30.11.2015    source источник
comment
Для тех, кто придет позже, я узнал, что расчеты elasticsearch по датам должны быть в микросекундах, поэтому мне просто нужно было иметь diff_date 604800000   -  person Mido    schedule 01.12.2015


Ответы (1)


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

{
    "range" : {
        "date" : {
            "gte" : "now-7d/d",
            "lt" :  "now"
        }
    }
}

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html

person user3775217    schedule 30.11.2015
comment
На самом деле не потому, что это часть более крупного запроса. И агрегация диапазонов не показывает сравнения с идентификационной_датой, которая является здесь основной информацией. но все равно спасибо за предложение :) - person Mido; 30.11.2015
comment
тогда вы можете использовать диапазон фильтров / aggs и агрегацию терминов вместе в aggregations.Filter aggs будет фильтром диапазона, а агрегатор терминов будет объединять ваши документы в полях даты. - person user3775217; 30.11.2015
comment
или, если вам нужен лучший подход, используйте агрегацию date_histogram в поле даты и определите сегменты в диапазоне дат. - person user3775217; 30.11.2015