Elasticsearch - как вернуть только данные, а не метаинформацию?

При выполнении поиска Elasticsearch возвращает структуру данных, которая содержит различную метаинформацию.

Фактический набор результатов содержится в поле "hits" в результате результата JSON, возвращаемого из базы данных.

Возможно ли, чтобы Elasticsearch возвратил только нужные данные (содержимое поля "hits" ), не будучи встроенным во все другие метаданные?

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

спасибо!

Вот пример структуры данных, возвращаемой Elasticsearch.

{
    "_shards":{
        "total" : 5,
        "successful" : 5,
        "failed" : 0
    },
    "hits":{
        "total" : 1,
        "hits" : [
            {
                "_index" : "twitter",
                "_type" : "tweet",
                "_id" : "1", 
                "_source" : {
                    "user" : "kimchy",
                    "postDate" : "2009-11-15T14:12:12",
                    "message" : "trying out Elastic Search"
                }
            }
        ]
    }
}

Ответ 1

Нет, это невозможно в данный момент. Если главной проблемой являются производительность и сложность анализа, вы можете рассмотреть возможность использования разных клиентов: java client или Thrift plugin.

Ответ 2

Вы можете по крайней мере фильтровать результаты, даже если их невозможно извлечь. В разделе common options "страницы REST API объясняется опция" filter_path". Это позволяет вам фильтровать только те части дерева, которые вас интересуют. Древовидная структура остается неизменной, но без дополнительных метаданных.

Я обычно добавляю параметр запроса:

&filter_path=hits.hits.*,aggregations.*

В документации ничего не сказано, что делает ваш запрос быстрее (я сомневаюсь, что это так), но по крайней мере вы могли бы вернуть только интересные части.

  • Исправлено, чтобы показать только hits.hits. *, так как "хиты" верхнего уровня также имеют метаданные.