У меня есть некоторые. json, где не все поля присутствуют во всех записях, например, caseclass.json
выглядит следующим образом:
[{
"name" : "john smith",
"age" : 12,
"cars": ["ford", "toyota"],
"comment": "i am happy"
},
{
"name": "a. n. other",
"cars": "",
"comment": "i am panicking"
}]
Использование Elasticsearch-7.6.1 через python client эластичный поиск:
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search
import json
import os
from elasticsearch_dsl import Document, Text, Date, Integer, analyzer
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])
class Person(Document):
class Index:
using = es
name = 'person_index'
name = Text()
age = Integer()
cars = Text()
comment = Text(analyzer='snowball')
Person.init()
with open ("caseclass.json") as json_file:
data = json.load(json_file)
for indexid in range(len(data)):
document = Person(name=data[indexid]['name'], age=data[indexid]['age'], cars=data[indexid]['cars'], comment=data[indexid]['comment'])
document.meta.id = indexid
document.save()
Естественно, я получаю KeyError: 'age'
, когда вторая запись пытается быть прочитанной. Мой вопрос: возможно ли загрузить такие записи в индекс Elasticsearch, используя клиент Python и предопределенное отображение вместо отображения Dynami c? Вышеприведенный код работает, если все поля присутствуют во всех записях, но есть ли способ сделать это, не проверяя наличие каждого поля в записи, поскольку реальные записи имеют сложную структуру и их миллионы? Спасибо