0

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

4

1 回答 1

0

谢谢大家的意见。

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

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

于 2018-11-07T12:34:22.423 回答