2016-05-18 30 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 ... }'

相关问题