全部, 我正在研究一个Nest 6.x查询,该查询在Elastic搜索的日期字段上生成流动的DSL。 Nest API仅在日期字段中为GreaterThanOrEquals()提供一个双精度值。如何将现在产生30d / d的DateMath类型转换为double?请在下面查看我的代码
查询DSL
{
"range": {
"agreementCancelDate": {
"gte": "now-30d/d"
}
}
}
巢
f.Range(r => r.Field("agreementCancelDate").GreaterThanOrEquals(d))
上面的d必须是now-30d / d的双值表示形式。
我正在使用以下代码使用Nest.DateMath API创建now-30d / d
var aMonthBack = Nest.DateMath.Now.Subtract("30d").RoundTo(DateMathTimeUnit.Day);
较旧版本的NEST(1.7x)允许我输入一个字符串值,例如“ now-30d / d”,但是6.x只接受一个双精度值
在上面的Nest代码中,f是QueryContainerDescriptor
答案 0 :(得分:1)
a range
query on DateTime
or DateTimeOffset
属性的约束接受一个DateMath
参数,该参数具有一个string
的隐式转换
public class MyDocument
{
public DateTime AgreementCancelDate { get; set; }
}
var client = new ElasticClient();
client.Search<MyDocument>(s => s
.Query(q => q
.DateRange(dr => dr
.Field(f => f.AgreementCancelDate)
.GreaterThanOrEquals("now-30d/d")
)
)
);
产生请求的
{
"query": {
"range": {
"agreementCancelDate": {
"gte": "now-30d/d"
}
}
}
}