На самом деле параметр filter_path может использоваться для уменьшения ответа, возвращаемого Elasticsearch. Так работает с
GET exampleindex/_search?filter_path=hits.hits._id
но не по телу запроса , потому что он не поддерживает его, поэтому вы получаете ошибку.
Если вы используете source: false
, как показано ниже, вы получите метаданные _index
, _type
, _id
, _score
, которые должны быть возвращены эластичным поиском.
N.B: В настоящее время нет способа удалить эти метаданные из ответа
GET exampleindex/_search
{
"query": {
"match_all": {}
},
"_source": false
}
Итак. Если вы используете какой-либо язык на стороне сервера, например, python / php или любой другой, вы можете отфильтровать идентификатор только в массиве / списке. Для примера:
import elasticsearch
es = elasticsearch.Elasticsearch()
res = es.search(
index=your_index,
body={"query": {"match_all": {}}, "size": 10, "fields": ["_id"]})
ids = [d['_id'] for d in res['hits']['hits']]
print(ids) # it will contain only the ids