Как проиндексировать документ вasticsearch, используя es.index () api с аргументами ключевых слов? - PullRequest
0 голосов
/ 05 июля 2019

Я хочу вставить документ в один из моих индексов в Elasticsearch. Для этого я использую фрагмент кода, который работал для идентификаторов 97/100. Однако для одного конкретного идентификатора он действует так, как будто используемый API неверен.

Я попытался прочитать документацию, он разрешает использование аргументов по ключевым словам. Я успешно проиндексировал похожие документы, используя тот же скрипт.

def index_columnar_mapping_in_datatable(es, index_name, datatable_file):
    mapping = {}
    mapping['columns'] = []
    with open(datatable_file, 'r') as json_file:
        text = json_file.read()
        json_content = json.loads(text)
        for col_ in json_content['columns']:
            try:
                del col_['analysis']
            except KeyError:
                pass
            curr_column = {}
            curr_column['_id'] = col_['id']
            curr_column['name'] = col_['name']
            curr_column['data_type'] = col_['data_type']
            mapping['columns'].append(curr_column)
    print(
        "This would be the mapping: {}".format(
            mapping['columns']
        )
    )
    es.index(
        index='datatables',
        doc_type='datatable_v1',
        request_timeout=60,
        id=index_name,
        body={
            "columns": mapping['columns']
        }
    )

Вывод:

This would be the mapping: [{'_id': u'c_1', 'name': u'Farzi ID', 'data_type': u'string'}, {'_id': u'c_92', 'name': u'phew', 'data_type': u'string'}, {'_id': u'c_88', 'name': u'ppsl', 'data_type': u'string'}]
Traceback (most recent call last):
  File "index_datatable.py", line 116, in <module>
    index_columnar_mapping_in_datatable(index_name, es, datatable_file)
  File "index_datatable.py", line 34, in index_columnar_mapping_in_datatable
    id=index_name
TypeError: index() takes no keyword arguments

Я ожидаю, что код запустится и проиндексирует необходимый документ в нужном индексе.

Моя версия Python - Python 2.7.6, и для Elasticsearch указано следующее:

elasticsearch==2.4.1
elasticsearch-dsl==2.2.0
...