Jak uzyskać listę wszystkich pól, które są obecne w indeksie (tj. Pola występujące w indeksowanych dokumentach, a nie tylko w odwzorowaniu)?Lista wszystkich pól w indeksie elasticsearch?
Odpowiedz
Począwszy 1.3 masz pole meta _field_names.
{
"aggs": {
"Field names": {
"terms": {
"field": "_field_names",
"size": 10
}
}
}
}
Objaśnienie:
Nie sądzę, że istnieje jakiś sposób, aby dokładnie to zrobić. Ale ponieważ wszystko w indeksie jest automatycznie wrzucane do mapowania, wiemy, że mapowanie zawiera co najmniej każde pole w indeksie. Stamtąd możesz przechodzić przez kolejne pola w mapowaniu i uruchamiać liczbę wyników w indeksie, które mają to pole. Jeśli liczba jest większa niż 0, to pole istnieje; jeśli liczba wynosi 0, to pole nie jest częścią indeksu. Ponieważ wiemy, że każde pole w indeksie będzie istniało w twoim mapowaniu, powinno to obejmować wszystkie możliwości.
Niektóre zaproszenia przykład 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" }
}
}
}
}'
Dokumentacja:
Proszę zauważyć, że moja odpowiedź będzie wymagała podania kodu (lub wykonania pracy ręcznej) w celu rzeczywistego określenia, które pola istnieją w twoim indeksie. To jest bardziej teoria/wyjaśnienie/zasób, aby zacząć. – Sam
mógłbym rozważyć stworzenie „elasticsearch-index-fieldlist” wtyczki, podobny do https://github.com/jprante/elasticsearch-index-termlist, jeśli naprawdę nie ma bezpośredni sposób, aby dostać się na liście pól obecnych w indeksie ...
W obecnej wersji (5.2), można użyć API mapowania, aby wszystkie nazwy pól:
GET index_name/_mapping?pretty
zajrzyj do official document aby uzyskać więcej informacji.
nie działa już z 5.x Zobacz: https://github.com/elastic/elasticsearch/issues/22576 – naoko