У меня есть DateTime? поле, я хочу возвращать элементы, если это поле в будущем, или если его NULL.ElasticSearch NEST Проверка нулевого значения
Проверка NULL является проблемой, ES не хранит нулевые значения, поэтому я не могу ее проверить.
Не существует способа проверить отсутствие существования в .Query?
Я знаю, что могу .Filter(), чтобы заставить ES возвращать элементы, которые не имеют определенного поля, но мне нужно проверить NULL в .Query(), который не работает.
Что у меня есть:
var results = client.Search<ElasticResult>(s => s
.Filter(f => f.Missing(ff=>ff.EndTimeUTC) || f.Exists(ff=>ff.EndTimeUTC))
.Query(q => q
.Term(p => p.ShortDescription, "somevalue")
&& (q.Range(p => p.OnField(f => f.EndTimeUTC).GreaterOrEquals(DateTime.UtcNow)) ||
q.Term(t => t.EndTimeUTC, null)) // THIS IS HAVING NO EFFECT
));
Я не уверен, что
.Filter(f => f.Missing("endTimeUTC") || f.Exists("endTimeUTC"))
ли на самом деле делает никакой разницы, необходимые документы возвращаются в SHORTDESCRIPTION запроса, они просто не «т есть поле endTimeUTC
Спасибо! Я не думаю, что мне когда-либо удавалось это сделать самостоятельно. – user3378086
По состоянию на 6.1 отсутствующий запрос был удален. Заменено на! N.Exists https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html#_literal_missing_literal_query – w00ngy