将CSV索引到Python中的ElasticSearch

2024-05-17 23:05:36 发布

您现在位置:Python中文网/ 问答频道 /正文

正在寻找将CSV文件索引到ElasticSearch,而不使用Logstash。 我正在使用elasticsearch-dsl高级库。

给定带有标题的CSV,例如:

name,address,url
adam,hills 32,http://rockit.com
jane,valleys 23,http://popit.com

按字段索引所有数据的最佳方法是什么?最后我想让每一排看起来像这样

{
"name": "adam",
"address": "hills 32",
"url":  "http://rockit.com"
}

Tags: 文件csvnamecomhttpurl标题address
4条回答

使用较低级别的elasticsearch-py库,这类任务更容易:

from elasticsearch import helpers, Elasticsearch
import csv

es = Elasticsearch()

with open('/tmp/x.csv') as f:
    reader = csv.DictReader(f)
    helpers.bulk(es, reader, index='my-index', doc_type='my-type')

如果您想用严格的类型和模型从.tsv/.csv创建elasticsearch数据库,以便更好地过滤,您可以这样做:

class ElementIndex(DocType):
    ROWNAME = Text()
    ROWNAME = Text()

    class Meta:
        index = 'index_name'

def indexing(self):
    obj = ElementIndex(
        ROWNAME=str(self['NAME']),
        ROWNAME=str(self['NAME'])
    )
    obj.save(index="index_name")
    return obj.to_dict(include_meta=True)

def bulk_indexing(args):

    # ElementIndex.init(index="index_name")
    ElementIndex.init()
    es = Elasticsearch()

    //here your result dict with data from source

    r = bulk(client=es, actions=(indexing(c) for c in result))
    es.indices.refresh()

相关问题 更多 >