如何在 elasticsearch c# 中使用 and , or operator(&&, ||)



我正在尝试在Nest中搜索记录,我的条件是,expiration_date可以为空,也可以在某个日期内(例如,10-20-18(,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,后者不应该。

感谢大家的评论。

我找到了解决方案,将.Query((替换为.PostFilter((,从而解决了问题。不知道它们之间的确切区别,但它起了作用。

如果有人知道,请评论,可能对其他人有帮助。

最新更新