【问题标题】:Elasticsearch painless get string field (which contains XML) into a variableElasticsearch无痛将字符串字段(包含XML)转换为变量
【发布时间】:2018-01-08 15:12:04
【问题描述】:

我正在尝试解析包含 XML 的 Elasticsearch 字符串字段(名为 Request.Body)。该字段包含一个 SOAP 请求字符串,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="myURL">
  <SOAP-ENV:Body>
    <ns1:find>
      <token>myData</token>
      <login>myData</login>
      <language>myData</language>
      <search>myData</search>
      <contains>false</contains>
    </ns1:find>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我的目标是使用无痛语言在脚本字段(在 Kibana 中)中提取 search 标记的值。

我试过这个:

def field = doc['Request.Body'].value;
if (field != null) {
  def matcher = /<search>(.*)<\/search>/.matcher(field);
  if (matcher.find()) {
    return matcher.group(1);
  }
  return "No match";
}
return "No field"; 

此代码始终返回No match

为了调试,我尝试返回 doc['Request.Body'].value 的值,在这个例子中,它只返回 1.0 而不是我的完整 XML。

我还尝试使用该代码连接此对象中 values 列表的值:

def field = doc['Request.Body'].getValues().stream().collect(Collectors.joining(""));
if (field != null) {
  def matcher = /<search>(.*)<\/search>/.matcher(field);
  if (matcher.find()) {
    return matcher.group(1);
  }
  return "No match";
}
return "No field"; 

现在,field 变量等于 XML 标记值的包含,但我丢失了 XML 标记,所以我无法使用正则表达式提取数据,并且像第一个脚本一样,它总是返回 No match .

所以我的问题是,如何在我的脚本中的变量中获取我的字段的完整 XML 值?为什么 Elasticsearch 会“解析”我的 XML?

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: xml elasticsearch kibana elasticsearch-painless


    【解决方案1】:

    这是一个老话题,但遇到了同样的问题。我可以通过这种方式使用字段定义来解决它:

    def field = params._source.Request.Body;
    

    此代码可以从一个字符串字段中提取相关信息:

    def field = params._source.message;
    if (field != null) {
    def matcher = /<decisionText>(.*)<\/decisionText>/.matcher(field);
    if (matcher.find()) {
    return matcher.group(1);
    }
    return "No match";
    }
    return "No field";
    

    在我的情况下,数据在“消息”字段中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      • 2021-02-22
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      相关资源
      最近更新 更多