У меня есть индекс эластичного поиска (студенты) со следующим отображением:
{
"name": {
"type": "text"
},
"age": {
"type": "integer"
},
"tests": {
"type": "nested",
"properties": {
"id": {
"type": "integer"
},
"score": {
"type": "float"
}
}
}
}
}
тесты - это вложенное поле, содержащее тесты, которые студент сдал вместе с оценкой этого теста. Я хочу запросить студентов с некоторым совпадающим именем, некоторым возрастным диапазоном и, что более важно, с помощью тестов следующим образом:
- пользователь может запросить данные для тестов двумя способами
- сначала - mustPassedTests эти тесты вместе с предоставленным баллом должны присутствовать в тесте студента с заданным идентификатором и данным баллом> =
- секунда - mustPassTests, это нормально, если их нет у студента (если есть обязательный пароль)
- если в запросе присутствуют mustPassTest и shouldPassTest, shouldPass просто не участвует в фильтрации, а просто влияет на оценку
- , если запрашивается только тест shouldPassTest (а не mustPass), любой один из заданных тестов shouldPass должен присутствовать в студенческих тестах
, например, для студента, имеющего данные как {name: "jason", тесты: [{id: 1, оценка: 12}]} и другой как {"name": "flock", tests: [{id: 1, Score: 10}, {id: 2, Score: 8}]}, если я запрашиваю тесты mustPass с mustPassTest как [{id: 1, оценка> = 10}], shouldPassTes t как [{id: 2, Score> = 10}], тогда оба ученика должны быть возвращены, но «наброситься» на более высокий рейтинг, поскольку он обладает обоими тестами (должен иметь соответствующий диапазон баллов и должен присутствовать в своем тесте)
как можно написать запрос ?? (используя отдыхающий клиент) Elasticsearch Версия: 7.5.x