2014-04-30 17 views

Odpowiedz

6

Począwszy 1.3 masz pole meta _field_names.

{ 
    "aggs": { 
    "Field names": { 
     "terms": { 
     "field": "_field_names", 
     "size": 10 
     } 
    } 
    } 
} 
+1

nie działa już z 5.x Zobacz: https://github.com/elastic/elasticsearch/issues/22576 – naoko

12

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:

+0

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

3

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.

Powiązane problemy