Apache nutch 没有将所有文档索引到 apache solr
Apache nutch not indexing all documents to apache solr
我正在使用 apache nutch 2.3(最新版本)。我已经抓取了大约 49000 个文档。从文档mime分析,爬取的数据包含约45000 thouse和text/html个文档。但是当我在 solr (4.10.3) 中看到索引文档时,只有大约 14000 个文档被索引。为什么文件之间的差异如此巨大(45000-14000=31000)。如果我假设 nutch 只索引 text/html 个文档,那么至少应该索引 45000 个文档。
这是什么问题。如何解决?
在我的例子中,这个问题是由于 nutch-site.xml 中缺少 solr 索引器信息造成的。当我更新配置时,这个问题就解决了。请在索引步骤检查您的爬虫日志。在我的例子中,它被告知没有找到 solr 索引器插件。
在 nutch-site.xml
中添加了以下行 (属性)
<property>
<name>plugin.includes</name>
<value>protocol-httpclient|protocol-http|indexer-solr|urlfilter-regex|parse-(html|tika)|index-(basic|more)|urlnormalizer-(pass|regex|basic)|scoring-opic</value>
<description>plugin details here </description>
</property>
您应该查看您的 Solr 日志,看看是否有任何关于 "duplicate" 文档的信息,或者只是查看 solrconfig.xml 文件以查找您要将文档推送到的核心。可能正在对更新处理程序进行 "dedupe" 调用,所使用的字段可能导致重复文档(基于几个字段)被删除。你会看到这样的东西
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="update.chain">dedupe</str> <<-- change dedupe to uuid
<str name="config">dih-config.xml</str> or comment the line
</lst>
</requestHandler>
以及稍后在文件中定义重复数据删除 update.chain、
<updateRequestProcessorChain name="dedupe">
<processor class="solr.processor.SignatureUpdateProcessorFactory">
<bool name="enabled">true</bool>
<str name="signatureField">id</str>
<bool name="overwriteDupes">true</bool>
-->> <str name="fields">url,date,rawline</str> <<--
<str name="signatureClass">solr.processor.Lookup3Signature</str>
</processor>
<processor class="solr.LogUpdateProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
"fields" 元素将 select 哪些输入数据用于确定记录的唯一性。当然,如果您知道输入数据中没有重复,这就不是问题。但是上面的配置将丢弃在显示的字段上重复的任何记录。
您可能没有使用 dataimport requestHandler,而是 "update" requestHandler。我不确定 Nutch 使用的是哪一个。无论哪种方式,您都可以简单地注释掉 update.chain,将其更改为不同的处理器链,例如 "uuid",或者向 "fields" 声明添加更多字段。
我正在使用 apache nutch 2.3(最新版本)。我已经抓取了大约 49000 个文档。从文档mime分析,爬取的数据包含约45000 thouse和text/html个文档。但是当我在 solr (4.10.3) 中看到索引文档时,只有大约 14000 个文档被索引。为什么文件之间的差异如此巨大(45000-14000=31000)。如果我假设 nutch 只索引 text/html 个文档,那么至少应该索引 45000 个文档。
这是什么问题。如何解决?
在我的例子中,这个问题是由于 nutch-site.xml 中缺少 solr 索引器信息造成的。当我更新配置时,这个问题就解决了。请在索引步骤检查您的爬虫日志。在我的例子中,它被告知没有找到 solr 索引器插件。
在 nutch-site.xml
中添加了以下行 (属性)<property>
<name>plugin.includes</name>
<value>protocol-httpclient|protocol-http|indexer-solr|urlfilter-regex|parse-(html|tika)|index-(basic|more)|urlnormalizer-(pass|regex|basic)|scoring-opic</value>
<description>plugin details here </description>
</property>
您应该查看您的 Solr 日志,看看是否有任何关于 "duplicate" 文档的信息,或者只是查看 solrconfig.xml 文件以查找您要将文档推送到的核心。可能正在对更新处理程序进行 "dedupe" 调用,所使用的字段可能导致重复文档(基于几个字段)被删除。你会看到这样的东西
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="update.chain">dedupe</str> <<-- change dedupe to uuid
<str name="config">dih-config.xml</str> or comment the line
</lst>
</requestHandler>
以及稍后在文件中定义重复数据删除 update.chain、
<updateRequestProcessorChain name="dedupe">
<processor class="solr.processor.SignatureUpdateProcessorFactory">
<bool name="enabled">true</bool>
<str name="signatureField">id</str>
<bool name="overwriteDupes">true</bool>
-->> <str name="fields">url,date,rawline</str> <<--
<str name="signatureClass">solr.processor.Lookup3Signature</str>
</processor>
<processor class="solr.LogUpdateProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
"fields" 元素将 select 哪些输入数据用于确定记录的唯一性。当然,如果您知道输入数据中没有重复,这就不是问题。但是上面的配置将丢弃在显示的字段上重复的任何记录。
您可能没有使用 dataimport requestHandler,而是 "update" requestHandler。我不确定 Nutch 使用的是哪一个。无论哪种方式,您都可以简单地注释掉 update.chain,将其更改为不同的处理器链,例如 "uuid",或者向 "fields" 声明添加更多字段。