Java requete composé (and or )

bonjour groupe,

je suis bloqué j'essaie de faire une requete du genre [ (A and B) or (B and C and D) or (L and N) ]

j'ai essayé avec la recherche multi search

pour chaque clause de type And j'ai fait le une requete BoolQueryBuilder et j'applique des musts

q1 = must A et B

q2 must B and C and D
q3 must L and M

puis j'ajoute q1 et q2, et q3 sur une requete globale de type MultiSearchRequestBuilder

le probleme c'est que j'ai besoin d'aplliquer un filtre sur le resultat final et je ne trouve pas de methode qui me permet d'appliquer ca sur un resultat de type MultiSearchRequestBuilder

(sr.add(client.prepareSearch().setQuery(globale)))

y a t il une autre methode SVP

Sans trop comprendre car il n'y a pas d'exemple concret, je ferais un truc du genre (pseudo code):

{
  "query": {
    "bool": {
      "should" : [
        "bool": { "must": [ {"term" : { "text": "A" } } }, {"term" : { "text": "B" } } } ] },
        "bool": { "must": [ {"term" : { "text": "B" } } }, {"term" : { "text": "C" } } }, {"term" : { "text": "D" } } } ] },
        "bool": { "must": [ {"term" : { "text": "L" } } }, {"term" : { "text": "N" } } } ] }
      ]
    }
  }
}

Un truc du genre.

tout d'abord je vous remercie pour votre réponse. c'est vrai ma question été un peu vague alors je vais expliquer mieux ma problematique

j'ai des regles d'inférence de type si A alors B que je souhaite exploiter dans un moteur de recommandation. Sachant que "A" s'appelle l'antécédant de la regle

Ces regles sont structurées sous une forme spécifique c'est a dire, la structure que j'ai précitée (Si A alors B ) et une forme plus générique qui modélise la règle avec des données génériques, par exemple pour la regle (Si A alors B) j'aurai son équivalent (Si C1 alors C2 ) puisque A appartient a C1 et B appartient ​a C2.

le besoin c'est que je souhaite pour un utilisateur U1 selectionner les regles qui peuvent etre pertinents pour lui , Il s'agit donc des regles avec des antécédants qui correspondent aux données d'interet de l'utilisateur .
Donc si l'utilisateur il a par exemple des interets A, G, M sachant que ces interets appartiennent aux classe C1 et C5 je souhaite d'abord sélectionner les règles génériques qui correspond aux intérêts générique de l'utilisateur puis filtrer avec les données d'interets spécifiques

Pour faciliter l'acces a ces regles de j'ai indexé chaque regle avec ses données antecedants spécifiques au sein d'un champ nommé AntSp et avec ses données génériques au sein d'un champ AntGen. Par exemple, la regle "Si A alors B" sera indexé avec le champ AntSp = A et un champ AntGen = C1

donc si je souhaite acceder aux regles qui peuvent repondre aux interets de l'utilisateur notamment A, G, M qui appartiennent a C1 et C5 donc il s'agit des regles qui sont indexé avec C1 et/ou C5 et A et/ou G et/ou M

de mon coté je fais une recherche générique avec C1 et C5 puis a parti du résultat je veux celles qui peuvent répondre aux données spécifique A et/ou G et/ou M. Je fais donc une recherche sur le champ AntGn avec avec les combinaison(C1, C5, C1C5) puis je filtre sur le champs AntSp avec les combinaisons (AG, AM, GM, AGM) .

Question 1 : comment formuler ma requête pour faire une recherche générique sur un champ particulier avec des combinaisons C1 or C5 or (C1 and C5), puis faire un filtre sur un autre champ ?

Moi j'ai opté pour une recherche multisearch qui combine plusieurs recherches : une recherche apart avec C1 , une recherche apart avec C5 et une rercherche apart avec C1C5.

puis je voulais faire un filtre sur le resultat final sur le champ AntSp avec les combinaison spécifiques A, AG, AM, GM AGM mais je ne trouve pas de methode pour filter sur un résultat obtenu suite a une requete multisearch.

peut etre qu'il y a une autre methode plus optimal , si c'est possible de me donner des idées.

Pour résumer le but été de réduire le temps d’accès au lieu d'interroger l'index avec les données spécifiques , je les regroupe en classes puis j'ai indexé les regels selon des données générique ce qui me permet d’encarter dans la première recherche plusieurs entrée dans l'index puis faire un filtre .

Question 2 : Est ce que j'ai bien fait d'indexer la règle en champs et de faire une recherche générique puis spécifique ? cela n'augmentera pas le temps d’accès au lieu de le réduire ?

Question 3: J'ai des questions a propos de l'index inversé que je ne comprend pas bcp :
si elasticsearch veut avoir les documents avec un terme t1 est ce qu'il parcoure tout le vocabulaire de l'index pour arriver a t1 ?

sinon j'ai besoin de savoir comment l'index elasticsaerch est structuré lorsque les données sont structurées en champs et comment l'acces se fait , y a t il un tutoriel qui explique mieux ca ?

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