如何解决将JSON转换为Elastic NEST查询无法正常工作
我正在尝试将以下JSON转换为nesT,但无法正常工作。它确实与网站上的字段相匹配,但是与范围不匹配,所以我得到了一些非常古老的结果。
在使用Kibana进行搜索时,我会发送以下请求:
"query": {
"bool": {
"must": [],"filter": [
{
"bool": {
"should": [
{
"match": {
"domain": "website.com"
}
}
],"minimum_should_match": 1
}
},{
"range": {
"@timestamp": {
"gte": "2020-08-03T12:37:07.821Z","lte": "2020-08-18T12:37:07.821Z","format": "strict_date_optional_time"
}
}
}
],"should": [],"must_not": []
}
},
并转换为nesT:
SearchDescriptor<ApacheRequest> Query(SearchDescriptor<ApacheRequest> qc)
{
var query = qc.Query(q =>
q.Bool(b =>
b.Filter(f =>
f.Bool(fb =>
fb.Should(sh =>
sh.Match(ma => ma
.Field(x => x.Domain)
.Query("website.com")
)
)
),f => f.Range(r => r.GreaterThanorEquals(timestamp))
)
)
);
return query;
}
正如我所说,它匹配域,但不匹配范围。即使我已经测试过timestamp
是正确的,我还是一个月后得到了结果。
我在做什么错了?
解决方法
啊,我发现了问题。我不应该使用.Range()
,而应该使用.DateRange()
。现在我的查询看起来像这样:
SearchDescriptor<ApacheRequest> Query(SearchDescriptor<ApacheRequest> qc)
{
var query = qc.Query(q =>
q.Bool(b =>
b.Filter(f =>
f.Bool(fb =>
fb.Must(sh =>
sh.Match(ma => ma
.Field(x => x.Domain)
.Query("website.com")
)
)
),f => f.DateRange(r =>
r.Field(fi => fi.Timestamp).GreaterThanOrEquals(from)
)
)
)
);
return query;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。