2017-11-28 4 views
1

In meinem Index habe ich ein Feld namens available_weekdays. Es ist ein Array mit Wochentagen von 1-7.Nur übereinstimmende Wochentage anzeigen

In meiner Abfrage übergeben ich ein Startdatum mit dem Format 'yyyy-MM-dd'.

Ziel: Ich möchte nur Datensätze anzeigen, die den Wochentag start_date entsprechen.

Lässt sagen, dass ich 2017-01-01 zu meiner Frage übergebe, die Wochentag 7 ist. Meine Abfrage würde mein übergangenes Datum zu einem Wochentag umwandeln müssen. Dann sucht es im Feld available_weekdays nach einem übereinstimmenden Wochentag. Wenn der Wochentag in available_weekdays gefunden wird, geben Sie den Datensatz zurück.

ES Version: 2.4.4

Ist dies möglich, indem ein Skript-Filter?

Antwort

3

Ja, können Sie diese script query

{ 
    "query":{ 
    "bool":{ 
     "filter":{ 
     "script":{ 
      "script":{ 
      "lang":"groovy", 
      "inline":"doc['available_weekdays'].values.find{it == DateTime.parse(param1).dayOfWeek().get()}", 
      "params":{ 
       "param1":"2017-01-01" 
      } 
      } 
     } 
     } 
    } 
    } 
} 
+0

der Tat etwas war aus mit meiner Antwort mit tun. +1 für dich! – Val

+0

hm das ist seltsam - es gibt keine Datensätze zurück .. Ich habe Datensätze mit available_weekdays = [1,2,3,4,5,6,7], so sollte es übereinstimmen. Es wird kein Fehler zurückgegeben. Ich kann keine Dokumentation zur DateTime-Klasse nur für Date finden. Vielleicht muss ich irgendwie das Datumsformat angeben? Groovy Scripting funktioniert - nur versucht, nicht leere available_weekdays zu entsprechen. Vielen Dank! – Oliver

+0

Date.parse ('yyyy-MM-dd', '2017-12-04') [Calendar.DAY_OF_WEEK] gibt die richtige Ganzzahl in der groovigen Konsole aus, funktioniert aber nicht in es. – Oliver

Verwandte Themen