Разбиение на страницы с определенным типом поиска в ElasticSearch

В настоящее время мы используем ElasticSearch 6.7, и у нас есть огромное количество данных, поэтому некоторые запросы занимают слишком много времени. Чтобы избежать этой проблемы, мы хотим настроить пагинацию в рамках нашего исследования в отношении elasticsearch. Проблема в том, что я не могу применить один из методов разбивки на страницы, предложенных ES, на разные запросы, которые уже существуют. Например, этот запрос содержит различные агрегации и запрос: https://github.com/trackit/trackit/blob/master/usageReports/lambda/es_request_constructor.go#L61-L75 Кроме того, результаты сортируются после сбора информации.

Я попытался настроить метод «Поиск после», а также форму разбиения на страницы с использованием from и size. Прокрутка не работает с агрегациями, а составная агрегация не принимает запрос.

Итак, есть ли хороший способ сделать разбиение на страницы в ElasticSearch в сочетании с другим типом запроса, и как это сделать в приведенном выше примере?


person clement-trackit    schedule 16.08.2019    source источник
comment
Похоже, вы можете немного изменить свои сопоставления, из того, что я узнал, ваше сопоставление должно быть оптимизировано в соответствии с вашими вариантами использования поиска, а не в соответствии с вашими данными, в идеале вам не нужно выполнять какие-либо операции во время запроса, в этом весь смысл сохранения плоской вложенной структуры в отличие от реляционной базы данных   -  person Aditya Agarwal    schedule 21.01.2020


Ответы (1)


составная агрегация не принимает запрос

Он принимает запрос. В приведенном ниже примере результаты фильтруются на основе play_name. Агрегация применяется только к результату запроса, и его можно разбить на страницы с помощью параметра after.

{
    "query": {
        "term": {
            "play_name": "A Winters Tale"
        }
    },
    "size": 0,
    "aggs": {
        "speaker": {
            "composite": {
                "after": {
                    "product": "FLORIZEL"
                },
                "sources": [
                    {
                        "product": {
                            "terms": {
                                "field": "speaker"
                            }
                        }
                    }
                ]
            },
            "aggs": {
                "speech_number": {
                    "terms": {
                        "field": "speech_number"
                    },
                    "aggs": {
                        "line_id": {
                            "terms": {
                                "field": "line_id"
                            }
                        }
                    }
                }
            }
        }
    }
}
person Anantha Kumaran    schedule 17.08.2019
comment
Как я должен добавить композит к такому запросу? pastebin.com/NQuyEtGW - person clement-trackit; 20.08.2019
comment
@clement-trackit вы можете использовать субагрегации, см. elastic.co/guide/en/elasticsearch/reference/current/ - person Anantha Kumaran; 21.08.2019