Stormcrawler,状态索引和重新爬网

时间:2019-03-20 15:56:49

标签: elasticsearch web-crawler stormcrawler

因此,我们已经成功运行了stormcrawler,目前主要索引中包含来自我们各个网站的超过200万个网址的索引。效果很好,但是SC似乎没有重新索引它先前索引的网址,而我正在尝试找出原因。

我尝试搜索有关SC如何从状态索引中选择下一个URL的详细信息。它似乎没有选择最旧 nextFetchDate,因为状态表中的文档的nextFetchDate为2019年2月3日。

浏览日志,我看到类似这样的条目:

2019-03-20 09:21:17.221 c.d.s.e.p.AggregationSpout Thread-29-spout-executor[17 17] [INFO] [spout #5]  Populating buffer with nextFetchDate <= 2019-03-20T09:21:17-04:00

,这似乎暗示SC不会查看状态表中带有过去日期的任何url。那是对的吗?如果SC泛滥成堆的网址,并且无法通过它们的nextFetchDate爬网所有网址,那么其中的某些内容会掉入裂缝吗?

使用比今天更旧的nextFetchDate来查询状态索引中的文档,我看到200万个URL中有140万个过去具有nextFetchDate。

如果爬网程序可以使用最旧的 nextFetchDate来获取网址并开始在其中进行爬网,那就太好了。

如何重新排列在nextFetchDate上丢失的那些URL?

1 个答案:

答案 0 :(得分:0)

默认情况下,ES喷口将获得最早的记录。日志显示的内容并不矛盾:它要求分片5的nextFetchDate低于3月20日的记录。

nextFetchDate实际上应该被认为是“不要在日期D之前爬网”,没有东西掉进裂缝。

  

用比今天更旧的nextFetchDate来查询状态索引中的文档,我发现200万个URL中有140万个过去具有nextFetchDate。

是的,这很正常。

  

如果搜寻器可以使用最早的nextFetchDate来获取网址并开始在其中进行爬网,那就太好了。

就是这样

  

如何重新排列在nextFetchDate上丢失的那些URL?

他们不会错过。他们应该被壶嘴挑选

也许检查喷嘴的数量是否与状态索引上的分片数量匹配。每个spout实例都负责一个分片,如果实例数少于分片,那么这些分片将永远不会被查询。

检查日志中应首先获取的特定URL:喷嘴是否完全将其发送?为此,您可能需要将日志转至DEBUG。