我必须通过Apache Nutch 2.3.1提取一些克隆数据的元数据信息,Nutch默认不提供这些信息。因为我必须写一个插件。出于学习目的,我以Nutch tutorial为出发点。我知道这个教程适用于1.x版本。我已经更改了所有必需的分类并成功构建它。以下是我遵循的步骤。
myPlugin/plugin.xml build.xml ivy.xml src/java/org/apache/nutch/indexer/AddField.java
<?xml version="1.0" encoding="UTF-8"?> <plugin id="myPlugin" name="Add Field to Index" version="1.0.0" provider-name="your name"> <runtime> <library name="myPlugin.jar"> <export name="*"/> </library> </runtime> <extension id="org.apache.nutch.indexer.myPlugin" name="Add Field to Index" point="org.apache.nutch.indexer.IndexingFilter"> <implementation id="myPlugin" class="org.apache.nutch.indexer.AddField"/> </extension> </plugin>
<?xml version="1.0" encoding="UTF-8"?> <project name="myPlugin" default="jar"> <import file="../build-plugin.xml"/> </project>
<ant dir="myPlugin" target="deploy" />
编辑./conf/nutch-site.xml
<property> <name>plugin.includes</name> <value>plugin-1|plugin-2|myPlugin</value> <description>Added myPlugin</description> </property>
分别在schema.xml和solrindex-mapping.xml中添加以下行
<field name="pageLength" type="long" stored="true" indexed="true"/> <field dest="pageLength" source="pageLength"/>
然后我编写了我的书面代码(类似于URL中的给定示例)
当我在本地模式下运行Nutch时,以下是索引到solr步骤日志信息
Active IndexWriters :
SOLRIndexWriter
solr.server.url : URL of the SOLR instance (mandatory)
solr.commit.size : buffer size when sending to SOLR (default 1000)
solr.mapping.file : name of the mapping file for fields (default solrindex-mapping.xml)
solr.auth : use authentication (default false)
solr.auth.username : username for authentication
solr.auth.password : password for authentication
IndexingJob: done.
我在solr架构中也添加了字段pageLength。根据我的期望,应该有一个新的字段pageLength具有适当的值但是solr中没有字段。
问题出在哪里?它是一个简单的玩具示例。 这是索引步骤
的nutch日志文件(hadoop.log)输出2016-07-26 16:53:25,649 INFO solr.SolrMappingReader - source: content dest: content
2016-07-26 16:53:25,649 INFO solr.SolrMappingReader - source: title dest: title
2016-07-26 16:53:25,649 INFO solr.SolrMappingReader - source: host dest: host
2016-07-26 16:53:25,649 INFO solr.SolrMappingReader - source: batchId dest: batchId
2016-07-26 16:53:25,649 INFO solr.SolrMappingReader - source: boost dest: boost
2016-07-26 16:53:25,649 INFO solr.SolrMappingReader - source: digest dest: digest
2016-07-26 16:53:25,649 INFO solr.SolrMappingReader - source: tstamp dest: tstamp
2016-07-26 16:53:25,649 INFO solr.SolrMappingReader - source: pageLength dest: pageLength
2016-07-26 16:53:26,140 INFO solr.SolrIndexWriter - Total 1 document is added.
2016-07-26 16:53:26,140 INFO indexer.IndexingJob - IndexingJob: done.
我如何确认插件是否由nutch加载? 第二,有没有办法测试Nutch插件,然后再将它配置为nutch进行爬行?
答案 0 :(得分:1)
尝试更改plugin.xml中的扩展ID。将其更改为“org.apache.nutch.indexer.AddField”并重新构建Nutch
<extension id="org.apache.nutch.indexer.AddField"
name="Add Field to Index"
point="org.apache.nutch.indexer.IndexingFilter">
<implementation id="myPlugin"
class="org.apache.nutch.indexer.AddField"/>
</extension>
我认为应该解决这个问题。
另外,只是为了验证控件是否来自您的插件类,或者不在代码中添加一些信息日志,如
LOG.info(“从插件打印”);
如果你能够在hadoop.log中看到这些日志,那意味着控制将进入插件类。