2017-01-10 9 views
2

Logstashを使用せずにCSVファイルをElasticSearchに索引付けする場合。 高レベルライブラリelasticsearch-dslを使用しています。インデックスフィールドによってすべてのデータへの最良の方法だろう何インデックスCSVからPythonへのElasticSearch

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

は、例えば、ヘッダとCSVを考えると?結局、私は仕事のこの

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

「elasticsearch-dsl」のように見えるのは、「elasticsearch-py'ライブラリに依存します。ドキュメントを挿入する方法の例については、[elasticsearch-py's docs](https://elasticsearch-py.readthedocs.io/en/master/#example-usage)を参照してください。 –

+0

質問はドキュメントのインデックス作成ではなく、.csvファイル全体をelasticsearchにインデックスする方法について – bluesummers

答えて

11

この種のように見えるように、それぞれの行を取得しているよと、低レベルelasticsearch-pyライブラリと簡単です:あなたは.tsv/.csvからelasticsearchデータベースを作成する場合は

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') 
+0

これは私が探していた答えの一種で、数時間後に試してみて、感謝します! – bluesummers

+0

正確に私が探していたPythonicとエレガントなソリューション - ありがとう! – bluesummers

+1

マッピングの仕方はどうすれば各出願のタイプを知ることができますか? – Somar

1

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() 
関連する問題