2016-05-18 35 views
5

我嘗試全面適配的功能是在kibana中創建一個度量標準,顯示「未驗證的用戶數」。 我發送用戶註冊時發送的日誌,然後發送用戶驗證時的日誌。表達式中使用的字段[]在映射中不存在

所以我想要的數量是註冊數量和驗證數量之間的差異。

在kibana中我不能做這樣的數學操作,所以我找到了一個解決方法: 我添加了一個名爲「未驗證」的腳本字段,當用戶註冊時等於1,當用戶驗證他的帳戶時等於-1 。 「未驗證」字段的總和應該是未驗證用戶的數量。

這是我在腳本字段定義的腳本: doc['ctxt_code'].value == 1 ? 1 : doc['ctxt_code'].value == 2 ? -1 : 0

有:

  • ctxt_code 1作爲註冊登錄

  • ctxt_code 2作爲驗證日誌

This se TUP效果很好,當我所有的日誌有一個「ctxt_code」,但是當一個日誌,而不該領域推kibana引發以下錯誤:

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

因爲kibana說,我無法理解這樣的錯誤:

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

這是這種情況。

任何人都有線索?

+0

如果你是法國人,你可以幫助我們在Elasticsearch法國論壇:HTTPS:/ /discuss.elastic.co/t/kibana-probleme-de-scripted-field-qui-nexiste-soit-disant-pas-dans-le-mapping/50618 – lenybernard

+0

你確定字段'ctxt_code'存在於映射中你所有的logstash指數?我在截圖的右上角看到你在過去七天工作,你能確保過去七天的logstash索引在創建的映射中有'ctxt_code'字段嗎? – Val

+0

沒有消息好消息? – Val

回答

2

沒有ctxt_code字段的日誌沒有問題...但是您必須在索引中爲此字段設置映射。我看到你正在用logstash-*查詢多個索引,所以你可能會碰到一個沒有它的索引。

您可以在所有索引中包含您的字段的映射。剛進入Sense和使用:

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. 
    } 
    } 
} 

如果你願意,你可以在命令行做到這一點:CURL -XPUT 'http://[elastic_server]/logstash-*/_mappings/[your_mapping_name]' -d '{ ... same JSON ... }'

相關問題