ich folgende Filter mit Elasticsearch (Java-Client) haben wollen:Elasticsearch (2.2) Java-Filter zwischen startdate und endDate falls vorhanden
Wenn startdate existiert und senken dann jetzt
Wenn endDate und mehr existiert dann jetzt
ich habe bereits folgende, aber es zeigt nicht die einmal die keine oder endDate haben startdate:
//Start date end date
BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
queryBuilder.filter(QueryBuilders.rangeQuery("startDate").lte("now"));
queryBuilder.should(QueryBuilders.existsQuery("startDate"));
queryBuilder.filter(QueryBuilders.rangeQuery("endDate").gte("now"));
queryBuilder.should(QueryBuilders.existsQuery("endDate"));
boolQueryBuilder.filter(queryBuilder);
die Abfrage in mysql sah wie folgt aus:
SELECT * FROM customer_job WHERE (start_date <= CURDATE() OR start_date IS NULL) AND (end_date>=CURDATE() OR end_date IS NULL);
So, wie das zu tun?
Ich habe versucht, aus den Antworten folgenden es gibt aber noch nicht diejenigen zeigen, die keine startdate oder endDate haben:
BoolQueryBuilder startDateQuery = new BoolQueryBuilder()
.should(QueryBuilders.existsQuery("startDate"))
.should(QueryBuilders.rangeQuery("startDate").lte("now"))
.minimumNumberShouldMatch(1);
BoolQueryBuilder endDateQuery = new BoolQueryBuilder()
.should(QueryBuilders.existsQuery("endDate"))
.should(QueryBuilders.rangeQuery("endDate").gte("now"))
.minimumNumberShouldMatch(1);
boolQueryBuilder.filter(startDateQuery).filter(endDateQuery);
Vielen Dank für Ihre Antwort :) Es sah vielversprechend aus, aber es zeigt immernoch nicht die, die kein Datum haben - siehe Bearbeiten :) –
Doh, du musst 'existsQuery' durch' missingQuery' ersetzen, mein bad – Val
Beeindruckend :) Es funktioniert -> Bitte se korrigieren Sie Ihre Antwort und ich werde akzeptieren! Danke vielmals!!! –