Как получить список всех полей, которые присутствуют в индексе (т.е. поля, которые встречаются в индексированных документах, а не только в сопоставлении)?
Список всех полей в индексе elasticsearch?
Ответ 1
Начиная с 1.3, у вас есть мета-поле _ field_names.
{
"aggs": {
"Field names": {
"terms": {
"field": "_field_names",
"size": 10
}
}
}
}
Ответ 2
Объяснение:
Не думайте, что есть способ сделать именно это. Но так как все в индексе автоматически попадает в отображение, мы знаем, что отображение содержит по крайней мере каждое поле в индексе. Оттуда вы можете прокручивать каждое поле в сопоставлении и запускать подсчет количества результатов в индексе, который имеет это поле. Если счетчик больше 0, то это поле существует; если счетчик равен 0, то это поле не является частью индекса. Поскольку мы знаем, что каждое поле индекса будет существовать в вашем отображении, это должно охватывать все возможности.
Некоторые примеры вызовов API:
# Get the mapping
$ curl -XGET 'http://localhost:9200/index/type/_mapping?pretty'
# Count a field
$ curl -XGET 'http://localhost:9200/index/type/_count' -d '
{
"query" : {
"constant_score" : {
"filter" : {
"exists" : { "field" : "name_from_mapping" }
}
}
}
}'
Документация:
Ответ 3
В текущей версии (5.2) вы можете использовать API сопоставления для получения всех имен полей:
GET index_name/_mapping?pretty
обратитесь к официальному документу для получения дополнительной информации.
Ответ 4
Я мог бы подумать о создании плагина "elasticsearch-index-fieldlist", аналогичного https://github.com/jprante/elasticsearch-index-termlist, если на самом деле нет простого способа получить в списке полей, присутствующих в индексе...
Ответ 5
Вы можете получить список имен полей, используя SQL-запрос
пример
GET _sql?format=txt
{
"query": "DESC index_name"
}
Выход
column | type | mapping
------------------------------------------------------+---------------+---------------
description |VARCHAR |text
description.autosuggest |VARCHAR |text
description.keyword |VARCHAR |keyword
address |STRUCT |object