Elasticsearch агрегации tophits - масштабирование - PullRequest
0 голосов
/ 21 июня 2019

PS: этот запрос отлично работает для меньшего набора данных. Проблема начинает происходить с огромным набором данных. Итак, пытаясь понять, какие другие параметры масштаба можно использовать.

Каков максимальный размер # документов, которые вы могли бы иметь, если вам нужно использовать условия агрегации + top_hits для запроса эластичного поиска, если у вас есть столько ресурсов, сколько требуется с точки зрения процессора, памяти и т. Д.? У меня есть набор данных с более чем миллионом документов.

У меня есть набор данных, содержащий более миллиона документов. Когда в БД загружается более 60 тыс. Документов, он запускает сообщение об ошибке readTimeout от Elastic. В моем запросе есть условия агрегации + top_hits, потому что мне нужно получить список уникальных документов по всему набору дат. Я попытался удалить top_hits из запроса, и он отлично работает, но так как мне нужно получить доступ к _source для каждого из этих уникальных документов, я не знаю другого способа получить это, кроме top_hits.

ES-запрос:

query = {
            "size": 0,
            "query": {
                "bool": {
                    "must": [],
                    "filter": {
                        "range": {
                            "time": {
                                "lte": timestamp,
                                "format": "date_optional_time"
                                }
                            }
                        }
                    }
                },
            "aggs": {
                "group_by": {
                    "terms": {
                        "size" : 450000,
                        "field": group_by_field
                        },
                    "aggs": {
                        "resource": {
                            "top_hits": {
                                "from": 0,
                                "size": 1,
                                "sort" : {
                                    "time" : "desc"
                                },
                                "_source": {}
                            }
                        }
                    }
                }
            }
        }


Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 384, in _make_request
    six.raise_from(e, None)
  File "<string>", line 2, in raise_from
  File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 380, in _make_request
    httplib_response = conn.getresponse()
  File "/usr/lib64/python3.7/http/client.py", line 1321, in getresponse
    response.begin()
  File "/usr/lib64/python3.7/http/client.py", line 296, in begin
    version, status, reason = self._read_status()
  File "/usr/lib64/python3.7/http/client.py", line 257, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "/usr/lib64/python3.7/socket.py", line 589, in readinto
    return self._sock.recv_into(b)
  File "/usr/local/lib/python3.7/site-packages/urllib3/contrib/pyopenssl.py", line 298, in recv_into
    raise timeout('The read operation timed out')
socket.timeout: The read operation timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/elasticsearch/connection/http_urllib3.py", line 172, in perform_request
    response = self.pool.urlopen(method, url, body, retries=Retry(False), headers=request_headers, **kw)
  File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 638, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/usr/local/lib/python3.7/site-packages/urllib3/util/retry.py", line 343, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "/usr/local/lib/python3.7/site-packages/urllib3/packages/six.py", line 686, in reraise
    raise value
  File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 600, in urlopen
    chunked=chunked)
  File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 386, in _make_request
    self._raise_timeout(err=e, url=url, timeout_value=read_timeout)
  File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 306, in _raise_timeout
    raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value)
urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='elasticsearch.service.apic.local', port=9200): Read timed out. (read timeout=60)
ConnectionTimeout caused by - ReadTimeoutError(HTTPSConnectionPool(host='elasticsearch.service.apic.local', port=9200): Read timed out. (read timeout=60))
Traceback (most recent call last):
...