Jestem dość początkujący w elasticsearch (choć mam ogromną doświadczeniem w pracy z SQL) i obecnie staram się sporządzić odpowiedni wniosek. Mam 2 pola logicznych isPlayer
i isEvil
że wpis jest albo true
lub false
na podstawie tego chcę podzielić swój zestaw danych na 4 grupy:
- isPlayer: prawda, isEvil: tak
- isPlayer: prawda, isEvil: kłamstwo
- isPlayer: kłamstwo, isEvil: prawda
- isPlayer: kłamstwo, isEvil: kłamstwo
Grupy te chcę losowo sortować wewnątrz siebie, a następnie połączyć je w jedną długą listę, który mogę podzielić na strony. Chciałbym zrobić to wewnątrz wniosku, tak jak to wydaje się "właściwym" sposobem, aby to zrobić, tak jak ja bym to zrobił podobnie w SQL. W tym liście grupy powinny być sortowane w kolejności, więc najpierw wszystkie nagrania grupy 1 w kolejności losowej, a następnie wszystkie nagrania grupy 2 w kolejności losowej, a następnie wszystkie nagrania grupy 3, itp . Konieczne jest, aby przypadkiem sortowania był odtwarzany, jeśli są ustawione te same dane wejściowe, więc jeśli sortowanie jest oparta na random_score
najlepiej byłoby, gdybym użył nasienie do przypadkowości.
Mogę stworzyć jeden wniosek, ale jak mi się połączyć 4?
Jako podejścia, które znalazłem do tej pory używałem zapytanie MultiSearch i Disjunction Max. Wygląda na to, że MultiSearch nie obsługuje podział na strony. Co do zapytania дизъюнкции Max, być może, brakuje mi lasów dla drzew, ale staram się ze wszystkich sił, aby podzapytania zostały losowo sortowane tylko wewnątrz siebie, przed dodaniem ich do siebie.
Oto jak piszę jedno zapytanie w tej chwili bez Disjunction Max Query
na wypadek , jeśli to pomoże:
{
"query": {
"bool": {
"should": [
{
"term": {
"isPlayer": true
}
},
{
"term": {
"isEvil": true
}
}
]
}
}
}