Elastic Search

Elasticsearch & python ( 복수데이터 취득 & 복수데이터 일괄등록 )

땅개발자 2021. 11. 10. 00:56
복수데이터 취득

Elasticsearch에서 최대 데이터 취득은 10000건이다. 

100000건 이상의 데이터를 취득해서 처리를 위해서는 아래와 같은 처리를 해야한다. 

result = get_es.search(index="{Index명}",
                       doc_type=doc_type,
                       body=query,
                       scroll='1m',
                       size=20)

scroll_id = result["_scroll_id"]
data_list = result["hits"]["hits"]

while(s_size > 0):
    query = {
        "scroll": "1m",
        "scroll_id": scroll_id
    }
    result = get_es.scroll(body=query)

    data_list = result["hits"]["hits"]
    scroll_id = result["_scroll_id"]
    s_size = len(result['hits']['hits'])
복수데이터 일괄등록
helpers.bulk를 사용한다. 
from elasticsearch import Elasticsearch, helpers

def get_bulk_data_fromat(index_name: str, data_list: list) -> None:

    for data in data_list:
        yield {
            "_op_type": "create",
            "_index": index_name,
            "_id": data.get("id"),
            "_source": data
        }

helpers.bulk(es, get_bulk_data_fromat(index_name, data_list), request_timeout=30)