Слишком большой запрос ElasticSearch - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть запрос ElasticSearch, который, кажется, заставляет ElasticSearch возвращать 504 «Запрос не удалось получить на сервер (код состояния: 504)».Кажется, это связано с размером запроса, потому что, если я выберу некоторые параметры, он будет работать.

Я пытаюсь вернуть совпадающие данные для нескольких местоположений (может быть сотни) в течение нескольких дней (до 21 дня).Каждое местоположение должно смотреть на определенные временные рамки.Ниже приведен лишь небольшой пример более крупного запроса, но, по сути, это то же самое, только с гораздо большим количеством местоположений.

Есть ли лучший способ написать запрос, чем тот, который у меня сейчас есть, которого не было бышанс получить очень большой запрос, когда у меня много мест?

{
"size": 10,
"sort": [{
    "@timestamp": {
        "order": "asc"
    }
}],
"_source": ["name", "location", "@timestamp"],
"query": {
    "bool": {
        "must": [{
            "bool": {
                "should": [{
                    "bool": {
                        "must": [{
                            "bool": {
                                "should": [{
                                    "geo_polygon": {
                                        "location": {
                                            "points": ["-14.0625,12.65625", "-15.46875,12.65625", "-15.46875,11.25", "-14.0625,11.25", "-14.0625,12.65625"]
                                        }
                                    }
                                }]
                            }
                        }, {
                            "bool": {
                                "should": [{
                                    "range": {
                                        "@timestamp": {
                                            "lte": 1537809912161,
                                            "format": "epoch_millis",
                                            "gte": 1537747200000
                                        }
                                    }
                                }]
                            }
                        }]
                    }
                }, {
                    "bool": {
                        "must": [{
                            "bool": {
                                "should": [{
                                    "geo_polygon": {
                                        "location": {
                                            "points": ["60.46875,22.5", "59.0625,22.5", "59.0625,21.09375", "60.46875,21.09375", "60.46875,22.5"]
                                        }
                                    }
                                }]
                            }
                        }, {
                            "bool": {
                                "should": [{
                                    "range": {
                                        "@timestamp": {
                                            "lte": 1537808898616,
                                            "format": "epoch_millis",
                                            "gte": 1537747200000
                                        }
                                    }
                                }, {
                                    "range": {
                                        "@timestamp": {
                                            "lte": 1537721508544,
                                            "format": "epoch_millis",
                                            "gte": 1537660800000
                                        }
                                    }
                                }]
                            }
                        }]
                    }
                }]
            }
        }]
    }
}
}

1 Ответ

0 голосов
/ 04 марта 2019

в свежих версиях большой запрос 400 код ошибки.Вы можете найти ошибку в журнале

sudo tail -n 200 /var/log/elasticsearch/elasticsearch.log
sudo tail -n 200 /var/log/elasticsearch/elasticsearch.log | grep maxClauseCount

, если у вас есть строка

Caused by: org.apache.lucene.search.BooleanQuery$TooManyClauses: maxClauseCount is set to 1024

Тогда вам нужно выполнить большой запрос, и вам нужно увеличить maxClauseCount.Для этого добавьте строку

indices.query.bool.max_clause_count: 10000

в файл /etc/elasticsearch/elasticsearch.yml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...