Преобразование сейчас-30d в удвоение с помощью Nest 6.x - PullRequest
0 голосов
/ 11 сентября 2018

Все, Я работаю над запросом Nest 6.x, который создает текущий DSL для поля даты в Elastic search. API Nest допускает только двойное значение для GreaterThanOrEquals () в поле даты. Как я могу преобразовать тип DateMath, который производит сейчас-30d / d, в double? Пожалуйста, смотрите мой код ниже

Запрос DSL

{
    "range": {
        "agreementCancelDate": {
            "gte": "now-30d/d"
        }
    }
}

Nest

f.Range(r => r.Field("agreementCancelDate").GreaterThanOrEquals(d))

d выше должно быть представлением двойного значения теперь-30d / d.

Я использую следующий код для создания сейчас-30d / d, используя Nest.DateMath api

var aMonthBack = Nest.DateMath.Now.Subtract("30d").RoundTo(DateMathTimeUnit.Day);

Старая версия NEST (1.7x) позволяла мне вводить строковое значение, например "now-30d / d", но 6.x принимает только двойное значение

В приведенном выше коде Nest f является QueryContainerDescriptor

1 Ответ

0 голосов
/ 11 сентября 2018

Ограничения для a range запроса для DateTime или DateTimeOffset свойств принимают аргумент DateMath, который имеет неявное преобразование из string

public class MyDocument 
{
    public DateTime AgreementCancelDate { get; set; }
}

var client = new ElasticClient();

client.Search<MyDocument>(s => s
    .Query(q => q
        .DateRange(dr => dr
            .Field(f => f.AgreementCancelDate)
            .GreaterThanOrEquals("now-30d/d")
        )
    )
);

который выдает запрос

{
  "query": {
    "range": {
      "agreementCancelDate": {
        "gte": "now-30d/d"
      }
    }
  }
}
...