Ich benutze elastische Suche .Net NEST Client, den ich noch nie zuvor verwendet habe. Was ich versuche zu tun, ist Ergebnis nach Datumsbereich vor dem Scoring zu filtern.Elasticsearch NEST Filter nach Datumsbereich
Ich benutze Objektinitialiser-Syntax, weil es am besten zu mir passt.
ich erreicht habe, was ich mit will:
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;
Das gibt mir JSON verlangen, wie ich erwartet.
{
"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"
}
}
}
}
}
}
Aber Dokumentation über filtered query sagt: „Veraltete in 2.0.0-beta 1 Verwenden die bool-Abfrage stattdessen mit einer must-Klausel für die Abfrage und einer Filterklausel für den Filter ".
Da dies die einzige Möglichkeit ist, Filter zu finden, gibt es eine bessere Möglichkeit, dies mit NEST Object Initializersyntax zu tun? Wie kann ich "Filterklausel für den Filter" verwenden oder muss ich Bereichsabfrage und Filter vergessen?
Danke!
++ zu dem Verwendungsbeispiel Verknüpfung :) –