Я получил требуемые результаты запроса в части запроса, упорядоченной по _score desc. Теперь мне нужно извлечь 3 поля каждого документа. Я хочу достичь как:
select distinct field1, field2, field3 from table A;
Я только что попробовал:
1) Используйте свернуть, чтобы удалить повторяющиеся значения
GET index/_search
{
"collapse" : {
"field" : "filed1.keyword"
}
...
}
Но проблема в том, что он будет хранить только отдельные значения filed1, но игнорировать значения field2 и fiel3. Например, у нас есть 2 записи, такие как:
[1, "a", "b"], [1, "c", "d"]
Используя этот метод, мы можем получить только одну запись, поскольку они имеют одинаковое значение field1. Я хочу, чтобы различные объединенные значения этих трех полей. Мы можем использовать inner_hits, чтобы получить значение distict второго поля, но согласно https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-collapse.html: Второй уровень свертывания не допускает inner_hits. Это означает, что его нельзя применять для получения точных значений в нескольких полях (> 2).
2) Использовать агрегаты:
GET index/_search
{
"aggs": {
"field1": {
"terms": {
"field": "field1.keyword"
},
"aggs": {
"field2": {
"terms": {
"field": field2.keyword",
"missing": ""
},
"aggs": {
"field3": {
"terms": {
"field": "field3.keyword",
"missing": ""
}
}
}
}
}
}
},
...
}
Возвращает значения округов [field1, field2, field3], но порядок документов изменяется. Они заказаны doc_count , но не _score, и мы не можем получить информацию о _score в результатах.
Итак, как мы можем получить различные объединенные значения без изменения текущего порядка (так как мы установили порядок документов в части «запроса»)? Или как мы можем упорядочить результаты агрегирования по _score?
Спасибо!