Requête sur plusieurs champs dans un embed object


#1

Bonjour,

Je ne trouve pas comment faire une requête sur plusieurs champs d'un même embeded object.

Un exemple

Voici mes données :

"hits": [
   {
      "_type": "company",
      "_score": 5.35856,
      "_source": {
         "ref": "123",
         "name": "First company",
         "sectors": [
            {
               "sector": {
                  "ref": "logistics",
                  "name": "Logistics"
               },
               "ref": "123-logistics",
               "priority": 0,
               "description": "Lorem ipsum"
            }
         ]
      }
   },
   {
      "_type": "company",
      "_score": 2.5752563,
      "_source": {
         "ref": "456",
         "name": "Second company",
         "sectors": [
            {
               "sector": {
                  "ref": "logistics",
                  "name": "Logistics"
               },
               "ref": "456-logistics",
               "priority": 0,
               "description": "Lorem ipsum"
            },
            {
               "sector": {
                  "ref": "associated_services",
                  "name": "Associated services"
               },
               "ref": "456-associated_services",
               "priority": 1,
               "description": "Lorem ipsum"
            }
         ]
      }
   },
   {
      "_type": "company",
      "_score": 2.413827,
      "_source": {
         "ref": "789",
         "name": "Third company",
         "sectors": [
            {
               "sector": {
                  "ref": "engineering",
                  "name": "Engineering"
               },
               "ref": "789-engineering",
               "priority": 0,
               "description": "Lorem ipsum"
            },
            {
               "sector": {
                  "ref": "construction",
                  "name": "Construction"
               },
               "ref": "789-construction",
               "priority": 1,
               "description": "Lorem ipsum"
            },
            {
               "sector": {
                  "ref": "logistics",
                  "name": "Logistics"
               },
               "ref": "789-logistics",
               "priority": 2,
               "description": "Lorem ipsum"
            }
         ]
      }
   }
]

Voici ce que je souhaite remonter : toutes les compagnies ayant comme référence secteur "logistics" (champ "sectors.sector.ref") et la priorité de ce secteur à 2 (champ "sectors.priority").

En faisant une requête bool "classique" , ES remonte (à juste titre), les documents qui ont au moins un secteur "logistics" et au moins un secteur avec la priorité 2. Mais je voudrais faire une liaison entre ces deux champs.
(J'espère être clair)

Merci d'avance
François


(David Pilato) #2

Je pense qu'il faut que tu utilises des champs de type nested pour le champ sectors.


#3

Merci David. Cela fait changer le mapping en profondeur.
Je vais tenter une alternative : utiliser le paramètre copy_to pour concaténer les champs sector.ref et priority.


(system) #4