3

我对 Solr 很陌生。我成功地通过 DIH 从我的 sql 数据库中索引数据。现在我想导入 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.

谁能告诉我我做错了什么?!我什至仔细检查了路径语法......

4

2 回答 2

0

我最近在尝试同样的事情时遇到了同样的问题;即,当使用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()" />
于 2013-10-17T11:04:38.437 回答
0

我建议查看类似问题的答案:

需要帮助使用 DataImportHandler 将 XML 文件索引到 Solr

使用像 groovy 这样的脚本语言要简单得多,也更容易测试。

于 2012-02-02T02:41:34.847 回答