Я создаю серию фильтров динамически, используя синтаксис перегрузки оператора.
MainQuery &= QueryContainer1;
MainQuery &= QueryContainer2;
etc.
Некоторые фильтры необязательны, поэтому я хочу, чтобы они только улучшали результаты, если они были найдены. Я по сути хочу этого:
bool
|___must
| |___term
| |___term
|
|___filter
| |___term
|
|___should
|___term
|___term
Кажется, не существует способа добиться этого с помощью синтаксиса перегрузки. Фактически здесь в документации говорится, что это не приведет к вышеуказанному результату, потому что ожидается соответствие хотя бы одного из «Условий».
MustTerm1 && Filter1 && (ShouldTerm1 || ShouldTerm2)
Документация:
На самом деле я хочу вот что:
MustTerm1 && Filter1 && (optionally)ShouldTerm1 && (optionally)ShouldTerm2
Или, если это невозможно сделать в этом синтаксисе, есть ли другой способ добавить фильтры «Следует» в мой Querycontainer, пока я его создаю?
О да. В этом больше смысла. Спасибо, @ Russ-Cam.
Нет проблем, рад помочь :) Обратите внимание, что API-интерфейс Fluent принимает несколько лямбда-выражений для каждого из предложений.
Вы можете создать запрос
bool
и передать набор запросов в виде предложенийmust
,should
иfilter
: elastic.co/guide/en/elasticsearch/client/net-api/current/…