У меня есть index
с именем books
, который имеет reviews
как object
, который может обрабатывать массивы. При получении данных в конкретном случае мне нужен только review
, имеющий максимум rating
.Извлечь только один объект внутри массива elasticsearch
"books" :{
"reviews": {
"properties": {
"rating": {
"type": "float"
},
"comments": {
"type": "string"
}
}
},
"author" : {
"type" : "string"
}
}
Многие книги могут иметь много reviews
каждый из которых имеет некоторые rating
. Для конкретного случая использования я хочу, чтобы в результирующем наборе был только reviews
, имеющий максимум rating
. Мне нужно построить поиск query
для такого результата.
POST books/_search
{
"size": 51,
"sort": [
{
"reviews.rating": {
"order": "asc",
"mode" : "min"
}
}
],
"fields": [
"reviews","author"]
}
С помощью script_fields
можно построить динамический fields
но не objects
. Иначе я мог бы сделать динамический объект reviews
, имеющий одно поле rating
, а другое как comment
.
Я не вижу способ сделать это с помощью статистической фаской. Я неправильно понял ваш вопрос и подумал, что вам нужен максимальный рейтинг по всем книгам. Поэтому я удалил свой ответ. –