Vorrei dare un'occhiata allo script filter. Il seguente filtro dovrebbe restituire solo i documenti che hanno almeno 10 elementi nel campo fieldname
, che è una matrice. Tieni presente che potrebbe essere costoso a seconda del numero di documenti presenti nel tuo indice.
"filter" : {
"script" : {
"script" : "doc['fieldname'].values.length > 10"
}
}
Per quanto riguarda la seconda domanda: hai davvero un array vuoto lì? O è solo un campo array senza valore? È possibile utilizzare il missing filter per ottenere documenti che non hanno alcun valore per un campo specifico:
"filter" : {
"missing" : { "field" : "user" }
}
Altrimenti immagino è necessario utilizzare script di nuovo, in modo simile a quello che ho suggerito sopra, solo con una lunghezza diversa come input. Se la lunghezza è costante avevo messo nella sezione params
modo che lo script viene memorizzato nella cache da elasticsearch e riutilizzato, poiché è sempre la stessa:
"filter" : {
"script" : {
"script" : "doc['fieldname'].values.length > param1"
"params" : {
"param1" : 10
}
}
}
Sapresti come fare se il campo fosse una stringa e non un array? ho provato "script": "doc ['title']. value.length()> 10" 'ma senza fortuna ... –
Ho lo stesso problema, il campo è un array, ma ES lo vede come String, in modo che getti 'groovy.lang.MissingPropertyException: Nessuna proprietà di questo tipo: lunghezza per la classe: java.lang.String' – lisak
@lisak Prova questo:" script ":" doc ['nomecampo']. size()> 50 " –