微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Solr DataImportHandler:我可以使用XPathEntityProcessor从xml属性获取动态字段名吗?

我有一些 XML可以摄入到Solr中,这听起来像是一个旨在由dataimporthandler解决的用例.我想要做的是从一个XML属性提取列名,从另一个属性提取值.这是我的意思的一个例子:

<document>
  <data ref="reference.foo">
    <value>bar</value>
  </data>
</document>

从这个xml片段,我想添加一个名称为reference.foo和值栏的字段. dataimporthandler包含一个用于处理XML文档的XPathEntityProcessor.我已经尝试过使用它,如果我给它一个已知的列名称(例如,< field column =“ref”xpath =“/ document / data / @ ref”>)但它无法找到任何文档或示例,以建议如何做我想要的,或无法完成.所以:

>我可以使用XPathEntityProcessor执行此操作吗?如果是这样,怎么样?
>如果没有,我可以使用dataimporthandler以其他方式执行此操作吗?
>还是我离开了写自己的导入处理程序?

解决方法

我没有设法在没有引入变换器的情况下找到这种方法,但是通过使用一个简单的ScriptTransformer,我就把它解决了.它是这样的:

...
<script>
function makePair(row) {
  var theKey = row.get("theKey");
  var theValue = row.get("theValue");

  row.put(theKey,theValue);
  row.remove("theKey");
  row.remove("theValue");

  return row;
}
</script>

...

<entity name="..." 
  processor="XPathEntityProcessor" 
  transformer="script:makePair"
  forEach="/document"
  ...>

  <field column="theKey" xpath="/document/data/@ref" />
  <field column="theValue" xpath="/document/data/value" />
</entity>
...

希望有人帮助!

请注意,如果您的dynamicField是多值的,则必须遍历theKey,因为row.get(“theKey”)将是一个列表.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。