如何在Elasticsearch C#中使用和或运算符(&&,||)

时间:2018-11-06 08:24:02

标签: c# elasticsearch nest

我正在尝试在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,以后应该没有。

1 个答案:

答案 0 :(得分:0)

感谢您的评论。

我找到了解决方案,将.Query()替换为.PostFilter(),从而解决了该问题。不知道它们之间的确切区别,但是确实有效。

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