【问题标题】:elastic search multiple indexes bulk importelasticsearch 多索引批量导入
【发布时间】:2020-07-31 22:26:16
【问题描述】:

我正在尝试将包含多个工作表的多个 .xlsx 文件中的数据导入到弹性搜索中。我的流程是这样的:

  1. 我打开 xlsx 文件并创建所有工作表的列表
  2. 我为每个工作表创建了一个 pandas 数据框并将其转换为 json
  3. 我使用 helpers.bulk 方法将 json 导入弹性。 我的问题是,当我运行它时,我得到了错误:

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

谁能指出一个循环遍历多个文件和多个工作表的示例?

【问题讨论】:

  • 批量索引时必须指定类型
  • 当我尝试使用帮助程序批量导入时,语法为 result = helpers.bulk(es, create_json(file,sheets,dfs), chunk_size=1000)。根据帮助文档,我没有可以定义索引名称或类型的地方

标签: python-3.x elasticsearch


【解决方案1】:

helpers.bulk 期望的第二个参数是一组应该如下所示的操作:

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

你需要:

  • _index: 索引文档的索引名称
  • _type: 必须是 _doc(这将从版本 8 中消失)
  • _id:文档ID
  • _source:你要索引的文档的实际内容。

确保检查您的 create_json 函数是否添加了所有这些参数。

更新:

查看您的代码...

为什么要两次调用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,否则您将不会索引任何内容...我怀疑您需要为@ 中的每个文件调用get_data_from_file() 987654337@和你得到的数据必须传入bulk_json_data...

【讨论】:

  • 感谢您的回答。如果我把它放在一个 for 循环中并使用变量作为索引名称和源代码,它会起作用吗?因为您的答案是将多条记录导入一个索引。我需要创建多个索引并将多个记录批量导入到每个索引中
  • 是的,你绝对可以在actions参数中为每个动作使用不同的索引名称
  • 我只是想知道您是否可以尝试我的建议以及是否成功?
  • Val 感谢您的关注。不幸的是我无法掌握它。我无法掌握语法。实际上,我有一个循环遍历一组 excel 电子表格,每次迭代它都会创建一个文件夹,其中 excel 表中的所有选项卡都写为 Json 文件,并创建一个包含路径和文件名的列表。然后另一个循环应该打开文件夹中的每个 json 文件并将其导入 Elastic。您能否提供一个有关如何执行此操作的示例,因为我在这里超出了我的理解范围?再次感谢您提供的任何帮助。
  • 也许你可以展示我们当前python代码的相关部分...
猜你喜欢
  • 2016-04-16
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 2015-08-07
  • 1970-01-01
  • 2016-03-11
  • 2017-06-05
相关资源
最近更新 更多