Фильтр даты списка гнезд - PullRequest
       9

Фильтр даты списка гнезд

0 голосов
/ 25 февраля 2019

В моем индексе есть документы типа привлечение, у них есть свойство, которое представляет собой список предложений.Эти предложения имеют срок действия.Каждая достопримечательность может иметь более одного предложения (свойство предложений представляет собой список предложений).

Я пытаюсь отфильтровать все атаки, к которым прикреплены все предложения с истекшим сроком действия.

Я получил это далеко:

private QueryContainer AddExpiredOffersFilter(QueryContainerDescriptor<AttractionDocument> query)
{
    query.DateRange(d => d.Field(f => f.Offers.First().Expires).GreaterThan(DateTime.Now));
    return query;
}

Однако это только для первого приложенного предложения.Как мне отфильтровать все прикрепленные предложения?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

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

        private QueryContainer AddExpiredOffersFilter(QueryContainerDescriptor<AttractionDocument> query)
    {

        return (
            (
                +query.Exists(d => d.Field(f => f.Offers.First().Expires))
                &&
                +query.DateRange(d => d
                    .Field(f => f.Offers.First().Expires)
                    .GreaterThanOrEquals(DateTime.Now)
                )
            )
            ||
            (
                !query.Exists(d => d
                    .Field(f => f.Offers.First().Expires)
                )
            )
        );

    }
0 голосов
/ 25 февраля 2019

Вы можете использовать значение Max для массива и сравнить его с Datetime.now.

Важные советы: Обратите внимание, что .First () означает не только первый элемент (более того, эластик не сохраняет элементпорядок в индексации).Анализируется весь массив (но, действительно, оператор. Field является оператором Or, поэтому не работает с вашим случаем, может работать с родительским предложением must_not bool, кстати).

   private QueryContainer AddExpiredOffersFilter(QueryContainerDescriptor<AttractionDocument> query)
    {
        query.DateRange(d => d.Field(f => f.Offers.Max(r => r.Expires)).GreaterThan(DateTime.Now));
        return query;
    }
...