我对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.
谁能告诉我我做错了什么?!我甚至仔细检查了路径语法...
答案 0 :(得分:0)
我建议查看类似问题的答案:
Need help indexing XML files into Solr using DataImportHandler
使用像groovy这样的脚本语言要复杂得多,而且更容易测试。
答案 1 :(得分:0)
我最近在尝试同样的事情时遇到了同样的问题;即,当使用 FileListEntityProcessor (读取多个本地.xml文件)和 XPathEntityProcessor (以获取某些XML元素)时。
根本原因:在这一行:
<field column="journal" xpath="//Name[.='journal']/following-sibling::Value/text()" />
解释:Solr不支持xpath属性的参数(“// Name ...”),而有效的xpath语法。 “Apache Solr 4.4参考指南”简单地说: XPath表达式,它将从此字段的记录中提取内容。仅支持Xpath语法的子集。
解决方案:将xpath的参数更改为文档根目录的完整路径:
<field column="journal" xpath="/full/path/from/root/of/document/Name[.='journal']/following-sibling::Value/text()" />