我正在尝试在Nest中搜索记录,我的条件是,expiration_date
可以为空,或者可以在某个日期(例如10-20-2018)内,而effective_date
可以在某个日期内(2018年9月20日)。
下面是我的查询,在这里我无法使用||和&&运算符,无论是语法问题,还是我的方法错误,有人可以帮助我吗?
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,以后应该没有。
答案 0 :(得分:0)
感谢您的评论。
我找到了解决方案,将.Query()替换为.PostFilter(),从而解决了该问题。不知道它们之间的确切区别,但是确实有效。
如果有人知道,请发表评论,这可能对其他人有所帮助。