我正在使用ElasticSearch。Net NEST客户端,我从来没有使用过。我试图做的是过滤结果的日期范围之前评分。
我使用Object初始化器语法,因为它最适合我。
我已经完成了我想要的与:
var filter = new FilteredQuery();
var queryForm = new TermQuery();
queryForm.Field = "id";
queryForm.Value = filterModel.Id;
filter.Query &= queryForm;
var rangeQuery = new DateRangeQuery();
rangeQuery.Field = "datetime";
rangeQuery.GreaterThanOrEqualTo = filterModel.DateBegin.Value.AddDays(-1);
rangeQuery.LessThanOrEqualTo = filterModel.DateEnd.Value.AddDays(1);
filter.Filter = rangeQuery;
// Use boolean query
searchRequest.Query = new BoolQuery() && filter;
这就像我期望的那样给了我请求JSON:
{
"from": 0,
"size": 0,
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{
"term": {
"id": {
"value": "XXXX"
}
}
}
]
}
},
"filter": {
"range": {
"datetime": {
"gte": "2015-12-31T00:00:00",
"lte": "2016-05-05T00:00:00"
}
}
}
}
}
}
但是关于filtered query的文档说"在2.0.0-beta1中不推荐使用。请改用bool查询,查询使用must子句,过滤器使用filter子句"。
因为这是我发现的唯一包含filter的方法,有没有更好的方法用NEST对象初始化器语法来做这件事?我如何使用"filter子句for the filter"或者我必须使用范围查询而忘记filter?
谢谢你!
1条答案
按热度按时间bwleehnv1#
有一个blog post解释了ES 2.0附带的NEST 2.0中的更改。
为了使用Object Initializer语法将
term
和range
筛选器添加到bool/filter
查询中,可以使用新的+
特殊构造来完成此操作,该构造将使term
查询 Package 在bool
查询的筛选器子句中:在此查看更多详细信息