繁体   English   中英

Elasticsearch - 创建索引并放入 csv 文件的数据

[英]Elasticsearch -Creating index and putting data of csv file

我有一个 CSV 文件CSV数据

我想为每个类别的动物创建单独的索引,例如。 所有的狗都应该在一个名为“dogs”的索引中,猫应该在另一个名为“cats”的索引中,等等。在解析数据时,如果已经有动物的索引,那么我会在该索引中添加条目,否则我想创建一个单独的索引并将该条目添加到该索引。 最后我应该有 3 个索引,其中包含以下数据:Dog - Jerry,Thera Cat - Lily,Melo Rabbit - Bunny

我想知道如何使用 python 完成此操作。我正在尝试但无法解析 csv 并且无法为每个类别创建新索引。

根据我的解决方案,您可以只解析 python 中的 CSV 文件,并在索引文档时使用摄取管道。

要读取 CSV 文件,请检查以下脚本并使用管道参数将数据插入到 Elasticsearch:

from elasticsearch import Elasticsearch, helpers
from csv import reader

es = Elasticsearch(host = "localhost", port = 9200)

with open('stockerbot-export.csv') as f:
    reader = csv.DictReader(f)
    helpers.bulk(es, reader, index='someindexname', pipeline='index-name-change-pipeline')

在执行命令之前,您需要为我们的逻辑创建一个管道,在 Elasticsearch 的 kibana 上发出以下请求:

PUT _ingest/pipeline/index-name-change-pipeline
{
  "processors": [
    {
      "set": {
        "field": "_index",
        "value": "someprefix-{{{animal}}}"
      }
    }
  ]
}

您也可以使用一些请求客户端而不是 kibana。 我无法端到端地测试 python 代码,但我在 Kibana 屏幕上看到了以下请求的结果:

POST test/_doc?pipeline=index-name-change-pipeline
{
  "id": 1,
  "animal": "dog",
  "name": "asb"
}

如您所见,在索引数据时索引名称是test 但是索引成功后,响应将是这样的:

{
  "_index" : "someprefix-dog",
  "_id" : "5HEJyIAB4KMK-wcc6Rtb",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

因此,正如您看到_index元数据一样,我们的管道工作正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM