Ich würde mir die script filter ansehen. Der folgende Filter sollte nur die Dokumente zurückgeben, die mindestens 10 Elemente im Feld fieldname
enthalten, das ein Array ist. Beachten Sie, dass dies je nach Anzahl der Dokumente in Ihrem Index teuer sein kann.
"filter" : {
"script" : {
"script" : "doc['fieldname'].values.length > 10"
}
}
In Bezug auf die zweite Frage: Haben Sie wirklich eine leere Array dort? Oder ist es nur ein Array-Feld ohne Wert? Sie können die missing filter zu bekommen Dokumente verwenden, die keinen Wert für ein bestimmtes Feld haben:
"filter" : {
"missing" : { "field" : "user" }
}
Ansonsten denke ich Sie Scripting wieder verwenden müssen, ähnlich zu dem, was ich oben angedeutet, nur mit einer anderen Länge als Eingabe. Wenn die Länge konstant ist würde ich es in der params
Abschnitt gelegt, so dass das Skript durch Elasticsearch und erneut verwendet werden zwischengespeichert werden, da es immer das gleiche:
"filter" : {
"script" : {
"script" : "doc['fieldname'].values.length > param1"
"params" : {
"param1" : 10
}
}
}
würden Sie wissen, wie dies zu tun wäre, wenn das Feld eine Zeichenfolge und kein Array wäre? Ich habe versucht "" Skript ":" doc ['title']. value.length()> 10 "' aber kein Glück ... –
Ich habe das gleiche Problem, das Feld ist ein Array, aber ES sieht es als String, so dass es 'groovy.lang.MissingPropertyException wirft: Nein solche Eigenschaft: Länge für die Klasse: java.lang.String' – lisak
@lisak Versuchen Sie Folgendes:" Skript ":" doc ['Feldname']. Größe()> 50 " –