2016-05-18 19 views
5

Funkcja, którą próbuję dopasować, polega na utworzeniu metryki w kibanie, która wyświetla liczbę użytkowników "bez ważenia". Wysyłam dziennik wysłany po zarejestrowaniu użytkownika, a następnie dziennik po sprawdzeniu poprawności użytkownika.Pole [] użyte w wyrażeniu nie istnieje w odwzorowaniach

Tak więc liczba, którą chcę, to różnica między liczbą zarejestrowanych i zweryfikowanych.

W Kibana nie mogę zrobić taką operację matematyczną, więc znalazłem rozwiązania: I dodał „pole skryptów” o nazwie „nie- zwalidowane”, które jest równe 1, gdy rejestry użytkowników i -1, gdy użytkownik potwierdza swoje konto . Suma pola "bez ważenia" powinna być liczbą niezatwierdzonych użytkowników.

To jest skrypt I zdefiniowane w moim skryptem polu: doc['ctxt_code'].value == 1 ? 1 : doc['ctxt_code'].value == 2 ? -1 : 0

z:

  • ctxt_code 1 jako dzienniku rejestru

  • ctxt_code 2 jako zweryfikowanym dzienniku

To se tup działa dobrze, gdy wszystkie moje dzienniki mają „ctxt_code”, ale kiedy dziennik bez tej dziedzinie jest popychany Kibana wyrzuca następujący błąd:

Field [ctxt_code] used in expression does not exist in mappings kibana error

Nie mogę zrozumieć ten błąd, ponieważ Kibana mówi:

If a field is sparse (only some documents contain a value), documents missing the field will have a value of 0

który jest.

Ktoś ma jakąś wskazówkę?

+0

Jeśli francuski, możesz nam pomóc na francuskim forum Elasticsearch: https://discuss.elastic.co/t/kibana-probleme-de-scripted-field-qui-nexiste-soit-disant-pas-dans-le-mapping/50618 – lenybernard

+0

Czy jesteś pewien, że pole 'kod_tekstu' istnieje w odwzorowaniach wszystkich indeksów logstash? Widzę w prawym górnym rogu ekranu, nad którym pracujesz przez ostatnie siedem dni, czy możesz upewnić się, że indeksy logstash z ostatnich siedmiu dni mają to pole 'ctxt_code' w utworzonym odwzorowaniu? – Val

+0

Brak wiadomości dobre wieści? – Val

Odpowiedz

2

Dobrze jest mieć logi bez pola ctxt_code ... ale musisz mieć mapowanie dla tego pola w swoich indeksach. Widzę, że wyszukujesz wiele indeksów przy pomocy logstash-*, więc prawdopodobnie trafiasz w taki, który go nie ma.

Możesz dołączyć mapowanie dla swojego pola we wszystkich indeksach. Wystarczy przejść do Sense i użyj tego:

PUT logstash-*/_mappings/[your_mapping_name] 
{ 
    "properties": { 
    "ctxt_code": { 
     "type": "short",   // or any other numeric type, including dates 
     "index": "not_analyzed" // Only works for non-analyzed fields. 
    } 
    } 
} 

Jeśli wolisz, możesz to zrobić z wiersza poleceń: CURL -XPUT 'http://[elastic_server]/logstash-*/_mappings/[your_mapping_name]' -d '{ ... same JSON ... }'