Я довольно новичок в elasticsearch (хотя и обладаю изрядным опытом работы с SQL) и в настоящее время пытаюсь составить правильный запрос. У меня есть 2 логических поля isPlayer
и isEvil
что запись является либо true
или false
на основе этого я хочу разделить свой набор данных на 4 группы:
- isPlayer: верно, isEvil: верно
- isPlayer: истина, isEvil: ложь
- isPlayer: ложь, isEvil: истина
- isPlayer: ложь, isEvil: ложь
Эти группы я хочу случайным образом отсортировать внутри себя, а затем объединить их в один длинный список, который я могу разбить на страницы. Я бы хотел сделать это внутри запроса, так как это кажется "правильным" способом сделать это, так как я бы сделал это аналогично в SQL. В этом списке группы должны быть отсортированы по порядку, поэтому сначала все записи группы 1 в случайном порядке, затем все записи группы 2 в случайном порядке, затем все записи группы 3 и т.д. . Необходимо, чтобы случайность сортировки была воспроизводимой, если заданы одни и те же входные данные, поэтому, если сортировка основана на random_score
в идеале я бы использовал семя для случайности.
Я могу создать один запрос, но как мне объединить 4?
В качестве подходов, которые я нашел до сих пор, я использовал запрос MultiSearch и Disjunction Max. Похоже, что MultiSearch не поддерживает разбиение на страницы. Что касается запроса дизъюнкции Max, возможно, мне не хватает леса для деревьев, но я изо всех сил стараюсь, чтобы подзапросы были случайным образом отсортированы только внутри самих себя, прежде чем добавлять их друг к другу.
Вот как я пишу один запрос на данный момент без Disjunction Max Query
, на случай, если это поможет:
{
"query": {
"bool": {
"should": [
{
"term": {
"isPlayer": true
}
},
{
"term": {
"isEvil": true
}
}
]
}
}
}