1

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

这是数据配置:

<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
4

1 回答 1

0

想出了一个更好的方法。

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

在这种情况下,xsl 将 xml 转换为准备好 solr 索引,例如:

<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 文档很少,并且在完成此操作时遇到了很多麻烦。

于 2013-11-01T00:37:53.070 回答