将嵌套查询与脚本过滤器混合使用

时间:2017-03-02 00:46:10

标签: elasticsearch kibana kibana-5

上下文

我们在elasticsearch中有关于恶意软件的数据。我们必须用kibana来分析它。对于每个样本(恶意软件),我们都有一些SSL证书。这些是嵌套字段。我是弹性搜索的新手,很难在官方文档中找到我想要的内容。

我想要什么

我希望能够创建一个尊重这些规则的图表(即:折线图):

  • 简单依靠Y轴
  • X轴上的证书文件名
  • 仅显示主题==发行人

简化映射

{
    "mappings":{  
        "sample":{
            "properties":{
                "static":{
                        "x509Certificates":{
                            "type":"nested",
                            "properties":{
                                "Status":{
                                    "type":"long"
                                },
                                "FileName":{
                                    "type":"keyword"
                                },
                                "Serial":{
                                    "type":"long"
                                },
                                "Signature":{
                                    "type":"keyword"
                                },
                                "PublicKey":{
                                    "type":"keyword"
                                },
                                "NotValidBefore":{
                                    "type":"date",
                                    "format":"epoch_millis"
                                },
                                "NotValidAfter":{
                                    "type":"date",
                                    "format":"epoch_millis"
                                },
                                "Subject":{
                                    "type":"keyword"
                                },
                                "Issuer":{
                                    "type":"keyword"
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

我已经尝试过的事情

不使用嵌套对象

它没有用,因为没有“加入”。图表已创建,但信息毫无价值。

使用kibana嵌套fork

https://github.com/homeaway/kibana/tree/nestedSupport-5.2 它实际上是有帮助的。至少我们可以使用嵌套字段生成图形。但它并没有完全解决问题。

在图表顶部的搜索栏中使用脚本查询

该查询类似于:

 {
   "bool": {
     "must": {
        "script": {
           "script": {
              "inline": "doc['Subject'].value == doc['Issuer'].value",
              "lang": "painless"
              }
           }
        }
     }
 }

我根本不确定,但是如果它搜索所有证书中的两个值中的至少一个是相等的。

使用脚本字段

我创建了一个类似于:

的简单布尔脚本字段
doc['Subject'].value == doc['Issuer'].value

并创建了一个布尔值为true的查询。它部分工作。

嵌套查询

它真的看起来像我想要的但是我不知道如何用这种方法说Issuer ==主题。

我的问题

解决问题的最简单方法是什么,知道这不是我们唯一需要嵌套脚本过滤器的用例?

请不要犹豫要求澄清!

1 个答案:

答案 0 :(得分:2)

如果您有脚本字段,那该怎么办?因为SubjectIssuer都是keyword的类型:

def newfield = "";

if((doc['Subject'].value).equals(doc['Issuer'].value)){
   newfield= "matched";
}else{
   newfield= "not matched";
}

然后,您可以在图表中应用过滤器来使用上述脚本字段,如下所示:

scriptedFieldName:"matched"

希望这有帮助!