Мне нужно получить документы из ES, используя клиент NEST с несколькими условиями И/ИЛИ на двух полях.Объединение запросов с использованием bool в Nest Elasticsearch
Мой запрос как:
SELECT * FROM Document WHERE (Year!=2012 && Year!=2013) AND (Format=".pdf" || Format=".prt" || Format=".jpeg")
ниже мой код:
var qc = new List<QueryContainer>();
foreach (var year in years)// years is the list of years that must not be included
{
qc.Add(Query<Document>.Match(m => m.OnField(p => p.Year).Query(year)));
}
var qF = new List<QueryContainer>();
foreach (var format in txtDocs)// txtDocs is the list of formats that should be included if available
{
qF.Add(Query<Document>.Match(m => m.OnField(p => p.Format).Query(format)));
}
var searchResults = client.Search<Document>(s => s.Index(defaultIndex).From(0).Size(50).
Query(
f => f.Bool(
b => b
.MustNot(qc.ToArray()).Should(qF.ToArray()))));
Когда я пытаюсь этот код он работает на те годы, которые не должны появляться в результатах, но и для форматов, должен быть выбран пользователем, он не отображает выбранные форматы, хотя они доступны. Я также использовал «must» вместо «should», но тогда он вообще ничего не извлекает.
У кого-нибудь была такая проблема?
Благодаря Роб! Фактически, я искал код, который создает динамический запрос, так как пользователь может выбрать несколько форматов и лет. Итак, наконец, основываясь на вашем ответе, я понял, где я ошибся! поле формата должно быть «Не проанализировано», и тогда мой код, который добавляется как новый ответ, работает хорошо! – Mahsa