将大型复杂XML文件处理成Solr

时间:2013-11-27 19:59:19

标签: solr xpath-2.0 dataimporthandler

我希望处理包含非常大且复杂的架构的XML文件。我知道我们可以使用DataImportHndler来处理这种类型的数据,但是在检索结果时,我们不会以与文件相同的方式获取数据。我想要以JSON格式的XML结果。

xml的结构非常复杂,因此我无法使用XPath Parser获得结果。 我的问题有其他解决办法吗?我认为我们中的一些人在处理大而复杂的数据时遇到了这种情况。

bellow只是XML文件架构的一个例子:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="chapter">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="sentence" minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="required" />
        <xs:attribute name="title" type="xs:string" use="required" />
    </xs:complexType>
</xs:element>
<xs:element name="report">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="toc" />
            <xs:element ref="chapter" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name="sentence">
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="ref" type="xs:string" />
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>
<xs:element name="toc">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="tocitem" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name="substructure">
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="class" type="xs:string" use="required" />
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>
<xs:element name="substructures">
    <xs:complexType>
        <xs:sequence maxOccurs="unbounded" minOccurs="0">
            <xs:element ref="substructure" />
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name="tocitem">
    <xs:complexType>
        <xs:attribute name="chapter" type="xs:IDREF" use="required" />
    </xs:complexType>
</xs:element>

1 个答案:

答案 0 :(得分:0)

您可以使用更新请求处理程序将复杂的XML转换为标准的Solr文档格式。请求处理程序可能如下所示:

  <requestHandler name="/update/xslt" class="solr.UpdateRequestHandler">
    <lst name="defaults">
        <str name="tr">myComplexToSolr.xsl</str>
    </lst>
  </requestHandler>

tr参数指向XSLT文件,该文件将输入XML转换为标准Solr格式。