Concat儿童节点XPathEntityProcessor Solr DIH

时间:2013-10-31 21:19:02

标签: xpath solr transformer dih

我试图通过DIH使solr字段的值包含有关XML中父子关系的信息。

这是dataConfig:

<dataConfig>
   <script>
      <![CDATA[
         function doSomething(row){
             //logic
             return row;
         }
      ]]>
   </script>
   <dataSource type="URLDataSource"/>
    <document>
         <entity name="getModels"
            pk="id"
            url="pathpathpath"
            processor="XPathEntityProcessor"
            forEach="/path"
            transformer="script:doSomething"
            >
                <field column="spec" xpath="/Group/name/SubGroup" transformer="script:doSomething"/> 
                <field column = ... />
          </entity>
    </document>

示例XML:

<Group>
   <name>
      Vehicle
   </name>
   <SubGroup>
        <name>Car</name>
   </SubGroup>
   <SubGroup>
        <name>Bike</name>
   </SubGroup>
</Group>

<Group>
   <name>
      Fruit
   </name>
   <SubGroup>
        <name>Apple</name>
   </SubGroup>
   <SubGroup>
        <name>Banana</name>
   </SubGroup>
</Group>

我将如何指定:

 <field column="spec" xpath="/Group/name/SubGroup" transformer="script:doSomething"/> 

这样我就可以得到规范的相应实例:

Vehicle Car

Vehicle Bike

Fruit Apple

Fruit Banana

理想情况下,使用名称和子名称之间的分隔符,如:

Fruit::Banana

1 个答案:

答案 0 :(得分:0)

找出更好的方法。

我们可以在输入xml上使用XSL转换来预先进行任何必要的格式化。

在这种情况下,xsl将xml转换为solr index ready,例如:

<add>
  <doc>
    <field name="id">MyID</field>
    .....
  </doc>
  ...

</add>

这是data-config.xml

<dataConfig>

  <dataSource type="URLDataSource"/>
       <document>
         <entity name="getModels"
            pk="id"
            stream="true"
            url="pathpathpath"
            processor="XPathEntityProcessor"
            xsl="path"
            forEach="/doc"
            useSolrAddSchema="true"
         >
               <field column="id" xpath="/add/doc/field[@name='id']"/>
               ...
       </entity>

     </document>

</dataConfig>

这是一种解决方法,而不是直接的解决方案。但我希望如果有其他人正在经历这一点,这会有所帮助。在线有很少的自定义DIH文档,并且在完成这项工作时遇到了很多麻烦。