У меня есть информация в ES. Отображение очень просто:
{
"index": {
"aliases": {},
"mappings": {
"level1": {
"properties": {
"id": {
"type": "string"
},
"level2": {
"type": "nested",
"properties": {
"level3": {
"type": "nested",
"properties": {
"value1": {
"type": "string"
},
"value2": {
"type": "long"
},
"id": {
"type": "string"
},
"value3": {
"type": "long"
}
}
},
"id": {
"type": "string"
}
}
}
}
}
},
"settings": {
"index": {
"creation_date": "1505476515647",
"number_of_shards": "5",
"number_of_replicas": "1",
"uuid": "_0IiQCPrQ1i-kDP1481y8w",
"version": {
"created": "2030099"
}
}
},
"warmers": {}
}
}
и когда я делаю запрос:
{"query": {"terms": {"_id": [ "value51" ] }}}
Я получаю данные с этой структурой:
_source (dict)
level1 (list)
level2 (list)
data1 (dict)
id
value1
value2
value3
data2 (dict)
data3 (dict)
...
data65000 (dict)
Проблема в том, что 65 000 данных слишком много, и у меня закончилась нехватка памяти, я хотел бы знать, может ли _search или ElasticSearch вообще каким-то образом доставлять эту информацию (data1, data2, data3...) партиями. Или если есть какой-то способ сделать этот запрос, чтобы у меня не хватило памяти на компьютере. Любая идея?
Спасибо!
Вы можете использовать функцию фильтрации источника: просто настройте список полей, например:
{
"_source": {
"includes": [
"data1*"
]
},
"query": {
"terms": {
"_id": [
"value51"
]
}
}
}
А потом:
{
"_source": {
"includes": [
"data2*"
]
},
"query": {
"terms": {
"_id": [
"value51"
]
}
}
}
Но это может снизить производительность из-за нескольких запросов.