В настоящее время я пытаюсь сделать отдельные виды нескольких блоков результатов одним запросом текстового поиска.К сожалению, я не смог найти правильный синтаксис, например, что результат запроса отсортирован правильно.
Мой индекс содержит следующие поля:
"category_id": { "type": "integer" }
"type": { "type": "keyword"}
"subject": { "type": "text"},
"body": { "type": "text"},
"date": { "format": "yyyy-MM-dd HH:mm:ss", "type": "date"}
Описание:
- Поле «category_id» является числовым значением
- Поле «type» может быть «E» или «U»
- Поле «subject» содержит текст
- Поле «body» содержит текст
- Поле «дата» содержит дату
Я пытаюсь добиться того, чтобы поиск строки внутри «subject» и «body» и соответствующего category_id привел к появлению списка результатов, которыйимеет специальную сортировку.
Пример запроса :
Поиск текста "foo" в полях "subject" и "body" для всех записей с "category_id", равным 12.
Сортировка результатов :
Первый блок : Результаты с типом == "E"
Второй блок : Результаты с типом ==«U»
Результаты в обоих вышеупомянутых блоках должны быть отсортированы снова:
Первый блок : результаты с моремrch попаданий по полю "субъект"
второй блок : результаты с поисковыми попаданиями по полю "тело"
Наконец, эти два блока должны быть отсортированы пополе «дата» каждое.
Сортировка показана как рисунок
Мой текущий запрос выглядит так:
{
"query": {
"function_score": {
"query": {
"bool": {
"must": {
"multi_match": {
"query": "foo",
"operator": "and",
"fields": [
"subject^10",
"body^0.1"
]
}
},
"filter": {
"bool": {
"must": [
{
"term": {
"category_id": 106
}
}
]
}
}
}
},
"exp": {
"date": {
"origin": "now",
"scale": "7d",
"decay": 0.9
}
}
}
},
"sort": {
"type": {
"order": "desc"
},
"_score": {
"order": "desc"
}
}
}
Сортировка по типу работает нормально, носортировка субблока по теме, телу и дате в какой-то момент путается.Моя идея состояла в том, чтобы использовать оценки для совпадений и даты, чтобы достичь необходимой сортировки ...
Есть ли способ выполнить этот тип модульной подсортировки?