Как использовать и, или оператор (&&, ||) вasticsearch c # - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь найти записи в Nest, мои условия таковы: expiration_date может быть нулевым или может быть в течение некоторой даты (например, 10-20-2018), а effective_date может быть некоторой датой (09-20 -2018).

Ниже мой запрос, здесь я не могу использовать || и && оператор, либо проблема с синтаксисом, либо мой подход неверен, кто-нибудь может мне помочь с этим?

docs = await _client.SearchAsync<PriceList>(s => s.Index(config.elasticsearchIndex)

                .Query(a => a.Bool(c=>c.Should(

                    d => d.Bool(e => e.MustNot(f=>f.Exists(g => g.Field(h => h.ExpirationDate))))
                    ||
                     .Query(a => a.DateRange(r => r.Field(field => field.ExpirationDate).GreaterThanOrEquals(forThisRange.fromDate)))
                    )))

                .Query(a => a.DateRange(r => r.Field(field => field.EffectiveDate).LessThanOrEquals(forThisRange.toDate)))

Моя версия гнезда - 6.4

ОБНОВЛЕНО Запрос:

.Query (a => a.Bool (c => c.Should (

)
                d => d.Bool(e => e.MustNot(f=>f.Exists(g => g.Field(h => h.ExpirationDate))))
                ,
                d=>d.Bool(e=>e.Must(f=>f.DateRange(r => r.Field(field => field.ExpirationDate).GreaterThanOrEquals(forThisRange.fromDate))))
                //i=>i.DateRange

                )))

            .Query(a => a.DateRange(r => r.Field(field => field.EffectiveDate).LessThanOrEquals(forThisRange.toDate)))

Я не получаю никакой ошибки, но не получаю дополнительную запись, она дает правильный результат + "expiration_date" имеет значение меньше 10-20-2018, позднее не должно.

1 Ответ

0 голосов
/ 07 ноября 2018

Спасибо всем за ваши комментарии.

Я нашел решение, замените .Query () на .PostFilter (), который решил проблему. Не знаю точной разницы между ними, но это сработало.

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

...