簡體   English   中英

elasticsearch 多索引批量導入

[英]elastic search multiple indexes bulk import

我正在嘗試將包含多個工作表的 multiple.xlsx 文件中的數據導入到彈性搜索中。 我的過程是這樣的:

  1. 我打開 xlsx 文件並創建所有工作表的列表
  2. 我為每個工作表創建一個 pandas dataframe 並將其轉換為 json
  3. 我使用 helpers.bulk 方法將 json 導入彈性。 我的問題是,當我運行它時,我得到了錯誤:

RequestError: RequestError(400, 'action_request_validation_exception', 'Validation Failed: 1: index is missing;2: type is missing;

任何人都可以指出一個循環遍歷多個文件和多個工作表的示例嗎?

helpers.bulk期望的第二個參數是一系列應該如下所示的操作:

{
    '_index': 'index-name',
    '_type': '_doc',
    '_id': 42,
    '_source': {
        "title": "Hello World!",
        "body": "..."
    }
}

你需要:

  • _index : 索引文檔的索引名稱
  • _type : 必須是_doc (這將在版本 8 中消失)
  • _id : 文檔的 ID
  • _source :您要索引的文檔的實際內容。

確保檢查您的create_json function 是否正在添加所有這些參數。

更新:

看你的代碼...

為什么要調用list_of_json()get_data_from_file()兩次? 只需要第二次調用

list_of_json()
json_names = list_of_json()
...
get_data_from_file(json_names)
data = get_data_from_file(json_names)

然后在bulk_json_data你需要改變我突出顯示的行

def bulk_json_data(json_names):
    for m in json_names:
        for doc in m:
            actions = [
                {'_index': doc,
                 '_type': '_doc',      <--- change this line
                 '_id':uuid.uuid4(),
                 '_source': data}
            ]

    return actions

但是您還需要傳入傳遞給_source變量的data ,否則您將不會索引任何內容...我懷疑您需要為json_names中的每個文件調用get_data_from_file()並且您獲得的數據必須是傳遞到bulk_json_data ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM