我正在为Nutch 1.11自定义parse-html插件以使用tika-1.14样机管。代码的意图是将samppipe结果存储在metata字段中,该字段稍后将由Solr索引。我之前用过这个tecnique就取得了成功。注意:我不想用samppipe替换内容字段 - 我想要除了完整内容之外的样品,所以我不能只设置nutch来使用biolerpipe作为默认值。
我在eclipse中设置了一个独立测试,插件中包含的Tika代码使用tika-app-1.14.jar依赖项查找并返回预期结果。
parse-html plugin.xml文件已被修改为包含tika-1.14.jar文件:
<runtime>
<library name="parse-html.jar">
<export name="*"/>
</library>
<library name="tagsoup-1.2.1.jar"/>
<library name="tika-app-1.14.jar"/>
</runtime>
使用Ant 1.9.2编译代码很好。
public ParseResult getParse(Content content) {
....
// part of default nutch which contains the full html content for the page
byte[] contentInOctets = content.getContent();
// ====================================
// Print an "I'm Here" message for debugging
String msg = "Tika Boilerpipe Parser";
System.out.println(msg);
// create the Tika stream
org.apache.tika.io.TikaInputStream stream =
org.apache.tika.io.TikaInputStream.get(contentInOctets);
// create the objects necessary for the boilerpipe
if (stream != null) {
org.apache.tika.metadata.Metadata md =
new org.apache.tika.metadata.Metadata();
org.apache.tika.parser.AutoDetectParser tikaParser =
new org.apache.tika.parser.AutoDetectParser();
org.apache.tika.sax.BodyContentHandler tikaTextHandler =
new org.apache.tika.sax.BodyContentHandler();
tikaParser.parse(stream,
new org.apache.tika.parser.html.BoilerpipeContentHandler(
tikaTextHandler), md);
if (tikaTextHandler != null) {
// tikaTextHandler is not null
System.out.println("md.Title: " + md.get("title"));
// md.get("title") = null
metadata.add("emphasis", tikaTextHandler.toString());
// emphasis = ''
}
}
System.out.println("Tika End");
// ====================================
问题是tikaParser.parse调用没有返回任何内容。它应该使用samppipe结果填充tikaTextHandler并且它不会。运行nutch indexchecker或parsechcker时,代码完成正确显示所有字段,但重点字段为空。我检查确认并且hadoop.log中没有错误。
感谢您的帮助!