Elastic search .Net NESTクライアントを使用しています。 私がしようとしているのは、スコアリングする前に日付範囲で結果をフィルタリングすることです。日付範囲でElasticsearch NESTフィルタ
オブジェクトイニシャライザの構文を使用しています。これは私に最も適しているためです。
私は私が望むものを達成しています
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の代わりにクエリのための句とフィルタのフィルタ句を使用します。
これはフィルタを含むことがわかった唯一の方法であるため、NEST Objectイニシャライザの構文でこれを行うより良い方法がありますか? どのように私は "フィルタ句をフィルタに使用する"または私は範囲のクエリを使用してフィルタを忘れる必要がありますか?
ありがとうございます!
++の詳細を参照してください:) –