2013-11-27 35 views
0

我希望處理包含非常大且複雜的模式的XML文件。我知道我們可以使用DataImportHndler來處理這種類型的數據,但是在檢索結果時,我們沒有以與文件中相同的方式獲取數據。我希望得到XML格式的結果以及JSON格式。將大型複雜XML文件處理爲Solr

xml的結構非常複雜,所以我無法使用XPath Parser作爲結果。 對我的問題有其他解決方案嗎?我認爲在處理龐大而複雜的數據時,我們中的幾個人遇到了這種情況。

波紋管是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> 

+0

這很簡單,如果你忘記DataImportHandler並改寫一些代碼。 –

回答

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。

+0

感謝您的快速響應,實際上我更關心solr的查詢結果,它僅返回solr doc格式的結果,或者我們可以使用XSLT覆蓋結果(根據我的知識)。我們可以得到與文件中格式相同的結果嗎? – user2551549

+0

與文件格式相同:哪個文件?你如何將文件添加到Solr索引?文檔是使用數據導入處理程序添加的,還是通過發佈XML添加的? – Kevin

+0

我正在將我的複雜XML處理爲solr進行搜索。 Solr只接受特定格式的文件。我通過DIH實現的。一旦我查詢,它只給出我們的結果,如solr文檔格式。我正在尋找將該結果轉換爲與文件中相同的格式。 – user2551549