【问题标题】:Solr DataImportHandler: Can I get a dynamic field name from xml attribute with XPathEntityProcessor?Solr DataImportHandler:我可以使用 XPathEntityProcessor 从 xml 属性获取动态字段名称吗?
【发布时间】:2011-08-16 16:10:37
【问题描述】:

我有一些 XML 要摄取到 Solr 中,这听起来像是一个打算由 DataImportHandler 解决的用例。我想要做的是从一个 XML 属性中提取列名并从另一个属性中提取值。这是我的意思的一个例子:

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

从这个 xml sn-p,我想添加一个名称为 reference.foo 和值 bar 的字段。 DataImportHandler 包括一个用于处理 XML 文档的 XPathEntityProcessor。我已经尝试过使用它,如果我给它一个已知的列名(例如&lt;field column="ref" xpath="/document/data/@ref"&gt;),它可以完美地工作,但找不到任何文档或示例来建议如何做我想做的事,或者它不能做完了。所以:

  • 我可以使用 XPathEntityProcessor 执行此操作吗?如果有,怎么做?
  • 如果没有,我可以使用 DataImportHandler 以其他方式执行此操作吗?
  • 还是我要编写自己的导入处理程序?

【问题讨论】:

    标签: solr dataimporthandler


    【解决方案1】:

    我还没有找到不带变压器的方法来做到这一点,但是通过使用简单的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") 将是一个列表。

    【讨论】:

      【解决方案2】:

      您要做的是选择键控属性值的节点。

      从您的示例中,您可以这样做:

      <field column="ref" xpath="/document/data[@ref='reference.foo']"/>
      

      【讨论】:

      • 如果您已经知道要查找的 ref 的值是什么,这将很有帮助。就我而言,我不知道那个值,所以我不能把它放在xpath 属性中。不过谢谢!
      • 哦,我明白了。抱歉,这对您没有帮助,但很高兴您能弄清楚。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      相关资源
      最近更新 更多