2013-11-27 3 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> 

The tr точек параметров в XSLT-файл, который будет преобразовывать входной XML в стандартный формат Solr.

+0

Благодарим за быстрый ответ. Меня больше интересует результат запроса от solr, который возвращает результат только в формате solr doc или мы можем переопределить результат с помощью XSLT (согласно моим знаниям). Можем ли мы получить результат в том же формате, что и в файле? – user2551549

+0

Тот же формат, что и в файле: какой файл? Как вы добавляете документы в индекс Solr? Добавлены ли документы с помощью обработчика импорта данных или добавлены ли они путем публикации XML? – Kevin

+0

Я обрабатываю свой сложный XML в solr для поиска. Solr принимает документ только в определенном формате. То, что я достиг через DIH. Как только я запрошу, он дает нам результат, как в формате только формата solr. Я хочу получить этот результат в том же формате, что и в файле. – user2551549

Смежные вопросы