Solr DataImportHandler не работает с файлами XML

Я очень новичок в Solr. Мне удалось проиндексировать данные из моей базы данных SQL через DIH. Теперь я хочу импортировать XML-файлы и индексировать их также через DIH, но это просто не будет работать! Мой data-config.xml выглядит так:

<dataConfig>
    <dataSource type="FileDataSource" encoding="UTF-8" />
    <document>
    <entity name="dir" 
            processor="FileListEntityProcessor" 
            baseDir="/bla/test2" 
            fileName=".*xml"
            stream="true"
            recursive="false"       
            rootEntity="false">
            <entity name="PubmedArticle"
                    processor="XPathEntityProcessor"
                    transformer="RegexTransformer"
                    stream="true"
                    forEach="/PubmedArticle"
                    url="${dir.fileAbsolutePath}">


                <field column="journal" xpath="//Name[.='journal']/following-sibling::Value/text()" />
                <field column="authors" xpath="//Name[.='authors']/following-sibling::Value/text()" />

             ..etc

И у меня есть следующие поля в schema.xml:

<field name="journal" type="text" indexed="true" stored="true" required="true" /> <field name="authors" type="text" indexed="true" stored="true" required="true" />

Когда я запускаю Solr, я не получаю ошибок, и ни один документ не проиндексирован:

<str name="Total **Rows Fetched**">**2000**</str>
<str name="Total **Documents Skipped**">**0**</str>
<str name="Full Dump Started">2012-02-01 14:59:17</str>
<str name="">Indexing completed. **Added/Updated: 0 documents.** Deleted 0 documents.

Может кто-нибудь сказать мне, что я сделал не так?! Я даже дважды проверил синтаксис пути...

2 ответа

Недавно я столкнулся с той же проблемой, когда пытался сделать то же самое; т. е. при использовании FileListEntityProcessor (для чтения нескольких локальных XML-файлов) и XPathEntityProcessor (для захвата определенных элементов XML).

Основная причина: находится в этой строке:

<field column="journal" xpath="//Name[.='journal']/following-sibling::Value/text()" />

Объяснение: аргумент для атрибута xpath ("//Name..."), хотя и допустимый синтаксис xpath, НЕ поддерживается Solr. "Справочное руководство Apache Solr 4.4" просто гласит: выражение XPath, которое извлечет содержимое из записи для этого поля. Поддерживается только подмножество синтаксиса Xpath.

Решение. Измените аргумент xpath на полный путь от корня документа:

<field column="journal" xpath="/full/path/from/root/of/document/Name[.='journal']/following-sibling::Value/text()" />

Я бы предложил рассмотреть ответы на аналогичный вопрос:

Нужна помощь в индексации XML-файлов в Solr с помощью DataImportHandler

Использование скриптового языка, такого как groovy, намного проще и проще для тестирования.

Другие вопросы по тегам