2017-10-09 20 views
0

Nous avons le document ES de voiture-actions qui suivent paires clé-valeur:recherche élastique: comment choisir des listes distinctes aléatoires non distinctes sur la base de l'identifiant unique du document?

{ 
    "stockid":1, 
    "car": "bmw" 
    "dealerid": "d1" 
}, 
{ 
    "stockid":2, 
    "car": "audi" 
    "dealerid": "d1" 
},, 
{ 
    "stockid":3, 
    "car": "mercedes" 
    "dealerid": "d1" 
},, 
{ 
    "stockid":4, 
    "car": "bentley" 
    "dealerid": "d2" 
}, 
{ 
    "stockid":5, 
    "car": "range rover" 
    "dealerid": "d1" 
} 

Il y a des milliers de ces documents. Le document contient beaucoup plus de champs, je l'ai juste simplifié et spécifié seulement les champs nécessaires pour comprendre la requête.

Nous voulons choisir les stocks de «N» de façon aléatoire en fonction du dealerid. Par exemple, si quelqu'un interroge le document sur les actions ci-dessus, il y a une probabilité égale d'obtenir le stock de "d1" ou "d2" malgré que le distributeur "d1" a 4 stocks et "d2" n'en a 1. Il y a mille documents avec mille des concessionnaires aussi de "d1" à "dXXXX" et cette liste est en constante évolution.

Quelqu'un peut-il m'aider à écrire cette requête élastique?

Répondre

0

Êtes-vous prêt à restructurer votre indice? Vous pouvez utiliser une approche Parent Child. dealers sont les parents, stocks sont des enfants, alors vous pouvez facilement utiliser une graine aléatoire pour interroger les concessionnaires ou les stocks par concessionnaire, car les documents seront uniques.

Vous devrait être en mesure de reproduire vos requêtes actuelles en interrogeant sur les stocks enfants puisque vous pouvez toujours accéder aux champs parents d'une manière dénormalisé en utilisant has_parent (ou has_child le sens opposé)

PUT/voitures

{ 
    "mappings" : { 
     "dealers" : { }, 
     "stocks" : { 
      "_parent" : { 
       "type" : "dealers" 
      } 
     } 
    } 
} 

GET/voitures/concessionnaires/_search

{ 
    "query" : { 
     "function_score" : { 
      "functions" : [ 
       { 
        "random_score" : { 
         "seed" : "randawefawfm" // generate this 
        } 
       } 
      ] 
     } 
    }, 
    "size" : N 
}