在我的上一篇文章 “Elasticsearch:Script fields 及其调试” 中,我详细地描述了如何使用 script fields 对搜索匹配的结果创建新的字段。这些字段的值基于 _source 或者 doc values 的值进行运算而形成的。在 Kibana 中,我们同样可以运用 scripted fields 来形成新的字段。我们甚至可以针对这些字段做数据分析。你可以详细地阅读我以前写过的文章:
在今天的文章中,我来讲述一个新的方法。它不是创建一个新的字段,而是基于现有字段的名称而形成的一个新的字段名称。我们可以运用在可视化中提供的 JSON input 来创建我们所需要的字段。
在今天的展示中,我将使用 7.12 来进行展示。其它的版本的界面将会有稍微的不同。
创建数据
在今天的练习中,我们创建如下的一个简单的索引:
POST twitter/_bulk
{ "index" : {} }
{ "city" : "北京-中国" }
{ "index" : {} }
{ "city" : "上海-中国" }
{ "index" : {} }
{ "city" : "广州-中国" }
{ "index" : {} }
{ "city" : "深圳-中国" }
{ "index" : {} }
{ "city" : "郑州-中国" }
{ "index" : {} }
{ "city" : "武汉-中国" }
{ "index" : {} }
{ "city" : "北京-中国" }
{ "index" : {} }
{ "city" : "北京-中国" }
{ "index" : {} }
{ "city" : "上海-中国" }
{ "index" : {} }
{ "city" : "成都-中国" }
{ "index" : {} }
{ "city" : "西安-中国" }
{ "index" : {} }
{ "city" : "天津-中国" }
{ "index" : {} }
{ "city" : "西安-中国" }
为了可视化,我们必须为上面的 twitter 索引创建一个叫做 twitter* 的索引模式。这里就不再赘述。
可视化数据
我们使用简单 terms aggregation 来创建一个基于中国各地城市的文档数:
这样我们就创建了一个基于中国城市的文档统计图。在上面的 X 轴上, 我们可以看到 “北京-中国”,“上海-中国”等等。也许我们对这个名字的显示感觉很怪异。我们希望展示的名字就是 “北京”,“上海”,那么我们该怎么做呢?
我们可以点击上面界面下方的 Advanced:
我们在上面可以看到一个叫做 JSON input 的输入框。在这个输入框中,我们可以输入一下脚本来对我们的 term 进行修改。在输入框中,我们输入如下的内容:
{
"script": "(_value.indexOf('-') > 0 ? _value.substring(0, _value.indexOf('-')) : _value)"
}
点击 Update 按钮:
我们可以看到在左侧的 X 轴上的字段的名字变成了我们想要的格式 “北京”,“上海”。最终的可视化图为: