Elastiscserach Sous requête


#1

Bonjour,

je cherche le moyen de faire une sous requête qui me retourne une liste de noms et ensuite j’exclus les noms de cette liste dans les résultats à afficher.
Exemple en SQL:

    Select NOM from Table where NOM not in (select NOM from Table where Prenom='Paul')

Après des recherches sur google sans succès je viens vers vous pour avoir une solution car on dit qu'une sous requête n'est pas encore possible avec elasticsearch.
Quelle pourrait être la solution pour transcrire cette requête en elasticsearch.

Merci!


(David Pilato) #3

Il n'y a pas de notion de join dans elasticsearch.

Donc faire une query qui renvoie un sous-ensemble qui sert ensuite comme paramètre d'une autre query n'est pas faisable de façon simple.

Le mieux est de réfléchir au modèle des documents.

Un exemple concret?


(David Pilato) #4

J'ajoute qu'il existe le type join dans elasticsearch, mais c'est à utiliser en dernier recours à mon avis.


#5

Bonjour,
Merci de me répondre.
Ce que je veux faire c'est avec les logs récoltés avec Metricbeat sur les postes de travail, savoir quel logiciel n'a pas été utilisé pendant une période donné par le poste de travail.
Exemple sur une plage de 15 mn, un logiciel ne sera pas utilisé par le poste à la 2ème minute et le sera peut être à la 8ème minute. Ainsi si je filtre avec NOT dans kibana sur ces 15mn, le poste de travail apparaîtra comme n'ayant pas utilisé le logiciel car dans les logs à la 2ème minute il n'a pas été utilisé alors qu'il l'a été à la 8 eme minute.
Pour éviter cela je veux faire un e sous requête qui me ramène les postes qui ont utilisé un logiciel donné et par la suite les exclus dans un second filtre comme cet exemple en SQL:

    Select PC from INDEX where PC not in (select PC from INDEX where system.process.name='WINWORD.EXE')

Merci!


(system) #6

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.