如何在Solr中为XML文件编制索引,该XML文件不是Solr期望的结构?

时间:2019-05-14 13:47:22

标签: xml indexing solr

我在Windows上使用Solr 8.0.0。我已经能够在pdf和csv文件上成功运行它。但是,我无法在结构良好的自定义xml文件上运行。

根据指南,xml文件需要遵循以下结构,以便solr可以正确索引文档(标识正确的字段)以进行搜索-

<add> 
   <doc> 
      <field name = "id">001</field> 
      <field name = "name">Jon Doe</field> 
   </doc>
   ...
</add>  

但是我需要索引的xml文件具有以下定义良好的结构(数千行)-

<tags>
  <row Id="1" TagName=".net" Count="280415" ExcerptPostId="3624959" WikiPostId="3607476" />
  <row Id="2" TagName="html" Count="806983" ExcerptPostId="3673183" WikiPostId="3673182" />
...
</tags>

当我发布此xml并进行查询时,我什么都没有得到。但是,上传虚拟xml的结构遵循指南的结构会自动进行。

我认为我可能必须手动编写managed-schema文件,但是我找不到有关如何执行此操作的任何指南/教程。

任何帮助或资源将不胜感激。

1 个答案:

答案 0 :(得分:1)

我同意赫克托·科雷亚(Hector Correa)的观点,如果您不能更改xml文件,则它是使用xslt文件处理此问题的最佳方法。但是请注意,您只能使用xslt版本1! (也许现在您也可以使用v2,但请先进行检查)

这是一个小例子(提示),它看起来如何,我还没有测试!

<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xslt:template match='/'>
    <xsl:for-each select='tags/row'>
        <field name="id"><xsl:value-of select="@Id" /></field>
        <field name="tagname"><xsl:value-of select="@TagName" /></field>
        <field name="count"><xsl:value-of select="@Count" /></field>
        <field name="excerptpostid"><xsl:value-of select="@ExcerptPostId" /></field>
        <field name="wikipostid"><xsl:value-of select="@WikiPostId" /></field>
    </xsl:for-each>>
</xslt:template>

字段名称也来自您的托管模式