Я работаю с эластичной базой данных и хочу возвращать результаты один за другим, используя scroll()
, что требует от меня получения scroll_id
с использованием метода search()
.
Размер результата может варьироваться от 0 до 40000, поэтому я не могу использовать search()
для всего этого.
Я не заметил проблемы, когда было большое числохитов, но когда есть только одно попадание, свиток ничего не возвращает.
query = {"query":{"match":{"message": "Techtotic"}}, "sort": [{"@timestamp":"asc"}]}
scrollid = es.search(index="ts-shanks*", size=2, scroll="50m", body=query)
hits = scrollid["hits"]["total"]
scrollid = scrollid["_scroll_id"]
for i in range(hits):
entry = es.scroll(scroll_id=scrollid, scroll="1m", filter_path=req_data)
try:
print(entry["hits"]["hits"][0]["_source"]["message"])
except Exception:
print(json.dumps(entry, indent=4))
В выводе отображается совпадение попадания в распечатке, соответствующее запросу '' 'search ()' '', ноне в том, что с scroll()
.
Кроме того, независимо от того, сколько обращений мы получаем, последний результат прокрутки всегда запускает блок исключения, потому что он пуст.
Я слышал, что search_type="scan"
исправит это, но кажется, что оно устарело.