Как я могу приносить информацию из ElasticSearch в пакетном режиме, если она находится на многих уровнях?

1

У меня есть информация в 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...) партиями. Или если есть какой-то способ сделать этот запрос, чтобы у меня не хватило памяти на компьютере. Любая идея?

Спасибо!

Теги:
elasticsearch

1 ответ

0

Вы можете использовать функцию фильтрации источника: просто настройте список полей, например:

{
  "_source": {
    "includes": [
      "data1*"
    ]
  },
  "query": {
    "terms": {
      "_id": [
        "value51"
      ]
    }
  }
}

А потом:

{
  "_source": {
    "includes": [
      "data2*"
    ]
  },
  "query": {
    "terms": {
      "_id": [
        "value51"
      ]
    }
  }
}

Но это может снизить производительность из-за нескольких запросов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню