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):