Je suis assez nouveau dans elasticsearch (mais avec un peu juste de SQL expérience) et je suis actuellement aux prises avec de mettre une bonne requête. J'ai 2 champs booléens isPlayer
et isEvil
qu'une entrée est soit true
ou false
sur. Sur cette base, je veux partager mon dataset en 4 groupes:
- isPlayer: true, isEvil: vrai
- isPlayer: true, isEvil: faux
- isPlayer: false, isEvil: vrai
- isPlayer: false, isEvil: faux
Ces groupes, je veux au hasard de tri à l'intérieur d'eux-mêmes, puis de les associer à une longue liste que je peux de la pagination. J'aimerais le faire à l'intérieur de la requête, comme cela semble être la "bonne" façon de faire cela, car je ferais de même en SQL. Dans cette liste, les groupes doivent être triés dans l'ordre, donc, la première de toutes les entrées de Groupe 1 dans un ordre aléatoire, puis toutes les entrées du Groupe 2 dans un ordre aléatoire, puis toutes les entrées de Groupe 3 etc. . Il est nécessaire que le caractère aléatoire de la tri est reproductible si on a les mêmes entrées, de sorte que, si le tri est basé sur random_score
idéalement, je serais en utilisant une graine pour le hasard.
Je peux construire une seule requête, mais comment puis-je combiner les 4?
En effet, les approches que j'ai trouvé jusqu'à présent MultiSearch et la Disjonction Max Requête. MultiSearch semble qu'il ne prend pas en charge la Pagination. Concernant la Disjonction Max Requête peut-être que je vais manquer la forêt pour les arbres, mais là j'ai du mal à avoir les sous-requêtes être classés de manière aléatoire, seulement à l'intérieur d'eux-mêmes avant d'ajouter l'un à l'autre.
Voici comment j'écris une seule requête pour l'instant sans Disjunction Max Query
, dans le cas où il permet de:
{
"query": {
"bool": {
"should": [
{
"term": {
"isPlayer": true
}
},
{
"term": {
"isEvil": true
}
}
]
}
}
}