Sunt destul de nou pentru elasticsearch (deși cu un pic echitabil de SQL experiență) și sunt în prezent luptă cu punerea corectă interogare împreună. Eu am 2 domenii boolean isPlayer
și isEvil
care o intrare este fie true
sau false
pe. Bazat pe asta, vreau să-mi împart setul de date în 4 grupe:
- isPlayer: adevărat, isEvil: adevărat
- isPlayer: adevărat, isEvil: fals
- isPlayer: false, isEvil: adevărat
- isPlayer: false, isEvil: fals
Aceste grupuri vreau să aleatoriu fel în ei înșiși, apoi atașați-le să fie o listă lungă care pot paginate. Aș vrea să fac asta în interogare, ca asta pare a fi "corect" mod de a face acest lucru, deoarece aș face-o în mod similar în SQL. În această listă, grupurile vor fi sortate în ordine, deci, în primul rând, toate intrările din Grupa 1 într-o ordine aleatorie, atunci toate intrările din Grupa 2 într-o ordine aleatorie, atunci toate intrările de Grup 3 etc. . Este necesar ca intamplarea de sortare este reproductibilă în cazul dat aceleași date de intrare, așa că, dacă sortarea se bazează pe random_score
în mod ideal, aș fi folosind o sămânță pentru dezordine.
Pot construi o singură interogare, dar cum pot combina 4?
Ca se apropie am găsit până acum MultiSearch și Disjuncții Max Interogare. MultiSearch pare ca acesta nu are suport pentru Paginare. Cu privire la Despărțire Max Interogare ar putea fi faptul că eu sunt pădurea de copaci, dar nu mă zbat într-având subinterogari fi sortate aleatoriu numai în ei înșiși înainte de a adăugându-le una de alta.
Aici cum se scrie o singură interogare pentru moment, fără Disjunction Max Query
, în cazul în care vă ajută:
{
"query": {
"bool": {
"should": [
{
"term": {
"isPlayer": true
}
},
{
"term": {
"isEvil": true
}
}
]
}
}
}