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

19

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

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

Может ли Elasticsearch возвращать только необходимые данные (содержимое поля «совпадения») без встраивания во все остальные метаданные?

Я знаю, что могу проанализировать результат в 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"
                }
            }
        ]
    }
}
Я считаю, что возможность контролировать то, что возвращает ES, является важной особенностью. Например, если кто-то хочет включить результаты, возвращенные ES, в воспроизводимый документ. Dror
Возможный дубликатFilter out metadata fields and only return source fields in elasticsearch The Demz
дубликат:stackoverflow.com/questions/43772834/… Sandeep Kanabar

Ваш Ответ

2   ответа
15

Вы можете по крайней мере отфильтровать результаты, даже если вы не можете извлечь их. & Quot;общие варианты& Quot; страница REST API объясняет «filter_path» вариант. Это позволяет вам фильтровать только те части дерева, которые вас интересуют. Структура дерева остается той же, но без дополнительных метаданных.

Я обычно добавляю опцию запроса:

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

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

  • Corrected to show only hits.hits.*, since the top level "hits" has metadata as well.
Просто чтобы добавить больше информации: filter_path (фильтрация ответов) не работает для версии 1.5asticsearch. Если его не переместить в документацию или не переименовать, он был впервые добавлен в версии 1.6:elastic.co/guide/en/elasticsearch/reference/1.6/…
10

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

"Нет, это невозможно в данный момент" ... поскольку изменившийся момент должен ли / может быть обновлен ответ? :)

Похожие вопросы