Elasticsearch .net 中的 DateRange 字段

问题描述

我正在努力实现类似的目标

.Where(m => m.PublishedDate.Value < m.LastUpdatedDate)

在弹性搜索中。这里 PublishedDate 可以为空。

到目前为止,我已经尝试了以下方法,但似乎不起作用。

var res2 = client.Search<Campaign>(c => c
    .source(s => s.Includes(i => i
        .Field(f => f.CampaignId)
        .Field(f => f.Offers.First().DateLastUpdated)
        .Field(f => f.Offers.First().DateLastPublished)))
    .Query(q => q
        .Bool(b => b
            .Must(m => m.Exists(t => t.Field(f => f.Offers.First().DateLastPublished)))
            .Must(m => m.Term(t => t.Offers.First().DateLastPublished.Value < t.Offers.First().DateLastUpdated,true))
            .Should(s =>
                s.Term(t => t.Offers.First().Approved,true),s =>
                s.Term(t => t.Offers.First().Deleted,true))
            .MinimumShouldMatch(new MinimumShouldMatch(1))))
    .Size(1000)
);

有人可以帮忙吗?谢谢

解决方法

我能够使用以下方式实现它。

var res3 = client.Search<Campaign>(c => c
    .Source(s => s.Includes(i => i
        .Field(f => f.CampaignId)))
    .Query(q => q.ConstantScore(cs => cs.Filter(fs => fs
        .Bool(b => b
            .Must(m =>
                m.Exists(e => e.Field(f => f.Offers.First().DateLastPublished)),m =>
                m.Exists(e => e.Field(f => f.Offers.First().DateLastUpdated)),m =>
                m.Script(s => s.Script(ss => ss
                    .Source("doc['offers.dateLastPublished'].value.getMillis() < doc['offers.dateLastUpdated'].value.getMillis()"))))
            .Should(s =>
                s.Term(t => t.Offers.First().Approved,true),s =>
                s.Term(t => t.Offers.First().Deleted,true))
            .MinimumShouldMatch(new MinimumShouldMatch(1))))))
    .Size(1000))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...