Получите все документы в индексе ES с python - PullRequest
0 голосов
/ 11 июля 2020

Я пытаюсь сохранить все документы в индексе ES под названием: news (44908 Document) и сохранить их в DataFrame

, но при запуске скрипта я получаю только первые десять документов .

Это мой код:

esClient = Elasticsearch()

response = esClient.search(index = 'news',
                                body = {},
                                )

#scrollId = response["_scroll_id"]
#print(scrollId)

esDocs = response["hits"]["hits"]
fields = {}
for num, doc in enumerate(esDocs):
    sourceData = doc["_source"]
    
    #response = esClient.scroll(scroll_id=scrollId, scroll = '1m')
    #scrollId = response['_scroll_id']
    #print(scrollId)
    
    for key, val in sourceData.items():
        
        if key == 'tags' or key == 'text' or key == 'title':
            
            try:
                fields[key] = np.append(fields[key], val)
            except KeyError:
                fields[key] = np.array([val])
        else:
            continue;

df = pd.DataFrame(fields)

Я пробовал использовать .scroll(), но это не сработало. Я все еще получаю только 10 первых документов.

Я тоже пытался указать size = number, но это не то, что я ищу ...

Это мой выходной фрейм данных Вывод Dataframe

NB: я использую Jupyter Notbook

Ответы [ 2 ]

0 голосов
/ 11 июля 2020

Если вы пытаетесь получить доступ к индексам Elasticsearch через pandas DataFrame API, я бы рекомендовал Eland . Тогда вам не обязательно загружать все документы в память, чтобы выполнять с ними операции.

0 голосов
/ 11 июля 2020

вам нужно указать size, количество документов, которое вы хотите вернуть

esClient.search(index = 'news', body = {'size': 44908})

Но это слишком много документов, и он, скорее всего, испортит sh.

...