Я новичок в Elasticsearch и извиняюсь, если запрос, который я задаю, очень прост и понятен.
Я использую следующее картирование студентов с их данными об образовании,
PUT students
{
"mappings" : {
"properties" : {
"StudentName" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"Education" : {
"type" : "nested",
"properties" : {
"degreeName" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"schoolName" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"endDate" : {
"type" : "date"
},
"startDate" : {
"type" : "date"
}
}
}
}
}
}
У меня около 15000 студентов в моем наборе данных. Пример документа:
PUT students/_doc/2
{
"StudentName":"Student 2",
"Education": [
{
"degreeName": "MS",
"schoolName": "School Y",
"startDate": "2016-05-01",
"endDate":"2014-01-01"
},
{
"degreeName": "PhD",
"schoolName": "School X",
"startDate": "2019-01-01",
"endDate":"2017-05-01"
},
{
"degreeName": "BE",
"schoolName": "School Z",
"startDate": "2013-05-01",
"endDate":"2009-01-01"
}]
}
PUT students/_doc/3
{
"StudentName":"Student 3",
"Education": [
{
"degreeName": "BE",
"schoolName": "School P",
"startDate": "2003-01-01",
"endDate":"1999-05-01"
}]
}
Мой вопрос заключается в том, что я пытаюсь выполнить простой запрос, чтобы показать студентам, которые имеют степень "BE" в качестве своей степени. Но я хочу, чтобы студенты, имеющие текущую степень BE (бакалавр инженерных наук), имели более высокий рейтинг, чем студенты, которые также получили степень магистра и доктора наук.
Из моих примеров, если я запрашиваю "BE", студент 3 должен быть оцененвыше студента 2. Я должен иметь возможность сортировать вложенные документы в порядке убывания на основе свойства endDate, а затем повышать его, если значение «degName» соответствует «BE» в первом элементе отсортированного вложенного поля.
МожетКто-нибудь, пожалуйста, пролить свет на это? Я прошел через вложенный запрос, вложенный фильтр. Я знаю, как сортировать элементы во вложенном поле, используя «Внутренние попадания». Но я хотел бы знать, есть ли способ сортировки, а затем запросить, чтобы дать дополнительный импульс.
Заранее спасибо.