Ответ 1
Все API-интерфейсы REST принимают параметр filter_path, который можно использовать для уменьшите ответ, возвращенный elasticsearch. Этот параметр принимает список разделенных запятыми фильтров, выраженных с помощью точечной нотации:
curl -XGET 'localhost:9200/_search?pretty&filter_path=took,hits.hits._id,hits.hits._score'
{
"took" : 3,
"hits" : {
"hits" : [
{
"_id" : "3640",
"_score" : 1.0
},
{
"_id" : "3642",
"_score" : 1.0
}
]
}
}
В python
def get_all( connection, index_name, type_name ):
query = {
"match_all":{}
}
result = connection.search( index_name, type_name,
{"query": query},
filter_path= ["took", "hits.hits._id", "hits.hits.score"])
return result
Если вы хотите фильтровать поля _source, вам следует рассмотреть возможность объединения уже существующих _source (подробнее см. Get API) с параметром filter_path следующим образом:
curl -XGET 'localhost:9200/_search?pretty&filter_path=hits.hits._source&_source=title'
{
"hits" : {
"hits" : [ {
"_source":{"title":"Book #2"}
}, {
"_source":{"title":"Book #1"}
}, {
"_source":{"title":"Book #3"}
} ]
}
}