我正在尝试将以下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;
}
关于elasticsearch - 将JSON转换为Elastic NEST查询无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63482535/