如何将Elasticsearch的JSON输出转换为表格?

3

我正在使用Head插件来运行ELASTICSEARCH查询。

我想将查询结果转换为一个表格。

我只需要"hits"对象数组的部分,其中列是我在查询中指定的字段:"http.date","src_shift","@timestamp"和"src_tz"。

是否有任何工具或插件可以做到这一点?

以下是查询的简要输出:

"took": 2418,
"timed_out": false,
"_shards": {
    "total": 3503,
    "successful": 3503,
    "failed": 0
},
"hits": {
    "total": 2524,"max_score": 9.194927,"hits": [
        {
            "_index": "$002555","_type": "pcap","_id": "AVAJJphp2MeWtoWCbQYG","_score": 9.194927,"fields": {
                "src_shift": [
                    1],"http.date": [
                    "Fri, 12 Jun 2015 22:40:54 GMT"],"@timestamp": [
                    1434147980397],"src_tz": [
                    "Europe/Warsaw"]}},{
            "_index": "$002555","_type": "pcap","_id": "AVAJJphp2MeWtoWCbQYH","_score": 9.194927,"fields": {
                "src_shift": [
                    1],"http.date": [
                    "Fri, 12 Jun 2015 22:40:54 GMT"],"@timestamp": [
                    1434147980397],"src_tz": [
                    "Europe/Warsaw"]}},...
2个回答

4
在头插件中,在您的任何请求选项卡上,您可以使用位于查询部分正下方的结果转换器部分。默认情况下,它返回整个JSON响应。

Result Transformer section

您可以修改并处理响应以返回所需的任何内容。在您的情况下,如果将默认的return root;替换为以下代码,您将得到想要的结果:
return root.hits.hits.map(function(hit) {
    var values = [];
    for (var field in hit.fields) {
        values.push(hit.fields[field]);
    }
    return values.join(",");
});

输出应该是:
1,"Fri, 12 Jun 2015 22:40:54 GMT",1434147980397,"Europe/Warsaw"
1,"Fri, 12 Jun 2015 22:40:54 GMT",1434147980397,"Europe/Warsaw"
...

太好了,谢谢!你有没有关于管理存储桶结果的建议? - CDominik
你是指聚合桶吗?你想要做什么? - Val
是的,如果响应是聚合结果,我没有字段,但有一个桶集合,所以我想列出键和doc_count。 - CDominik
你可以完全相同地做到这一点,只需使用 root.aggregations 而不是 root.hits.hits。如果需要,随时可以创建另一个具有特定用例的问题。 - Val
你好。我正在尝试从查询 JSON 中实现这个功能。我发现了 1.7 版本的 transform 文档,但那是旧版本的。在 5.1 版本文档中没有关于此的任何内容。能否有人为我提供一些提示? - Shadi

2

顺便说一下,我最近发布了一个tabify函数的独立实现,网址为https://github.com/datavis-tech/es-tabify。 - curran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接