Отдельные запросы через гнездо извлекают то, что я ожидаю, но когда я пытаюсь использовать оба запроса для создания логического запроса AND, кажется, что он возвращает только значения для MatchPhrase и игнорирует DateRange.
Отдельные запросы are ..
resultsList = Client.SearchAsync<AuditLog>(s => s
.From(0)
.Take(10)
.Query(q => q
.MatchPhrase(mp => mp
.Field("audit_Action")
.Query("Successful logout")
)
)
).Result.Documents.ToList();
And ...
resultsList = Client.SearchAsync<AuditLog>(s => s
.From(0)
.Take(10)
.Query(q => q
.DateRange(r => r
.Field("audit_TimeStamp")
.GreaterThanOrEquals("2017-03-07T13:00:00")
.LessThanOrEquals("2017-03-07T14:00:00")
)
)
).Result.Documents.ToList();
Эти два запроса возвращают правильное количество строк, 10 и 5 соответственно, но когда я объединяю два запроса, он все равно возвращает 10 строки, а не 1, как ожидалось. Мой пересмотренный запрос ...
resultsList = Client.SearchAsync<AuditLog>(s => s
.From(0)
.Take(10)
.Query(q => q
.Bool(b => b
.Must(m1 => m1
.DateRange(r => r
.Field("audit_TimeStamp")
.GreaterThanOrEquals("2017-03-07T13:00:00")
.LessThanOrEquals("2017-03-07T14:00:00")
)
)
.Must(m1 => m1
.MatchPhrase(m => m
.Field("audit_Action")
.Query("Successful logout")
)
)
)
)
).Result.Documents.ToList();
Не уверен, что не так, но думаю, что это, вероятно, потому что я использую для ОБЯЗАТЕЛЬНО, и они OR OR