0

我从一个已爬网的内部站点返回结果。问题是由于在代码中使用了位置哈希,我得到了多个结果:

http://site.com/en/personal/refunds.html
http://site.com/en/personal/refunds.html#
http://site.com/en/personal/refunds.html#content
http://site.com/en/personal/refunds.html#section1

虽然它们可能都是相关的,但当它们是我的前四名结果时看起来并不好!有什么方法可以将它们视为一个结果?

看起来 # 和 #content 出现在大多数页面上,所以我可以应用一些规则来过滤掉它们。它们用于跳转到内容,另一个用于切换可访问性样式表。

4

3 回答 3

1

第一个选项,也是最好的选项,是不要抓取任何此类页面。正如@Jayendra 提到的,使用正则表达式 urlfilter

您拥有的另一个选项是使用更新链功能修改索引文档值。实现接口UpdateRequestProcessor并使用 Java 代码自行解析,修改 URL 以删除 #anchor 元素。

我想到的最后一个选项是在 URL 字段中使用PatternReplaceCharFilterFactory,如下所示:

<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="(#.*)" replacement=""/>

使用第一个解决方案,您只能为每个“位置”索引一个页面。使用其他页面,您将索引所有页面,但只有最后一个真正被索引,因为 Solr 将删除此文档的任何先前版本。

于 2013-02-08T23:00:48.143 回答
1

您可以过滤以带有 # 的模式结尾的 url。您可以在regex-urlfilter.txt中指定要包含或排除的模式

这将只允许对根页面进行索引,而将带有# 的页面排除在索引之外。

于 2013-02-06T04:15:40.517 回答
0

好的,我得到了这个工作,我所做的是编辑regex-normalize.xml文件并告诉它忽略其中带有 # 的 URL:

<regex>
  <pattern>#.*</pattern>
  <substitution>$1</substitution>
</regex>

我需要将“urlfilter-regex”添加到nutch-site.xml中的 plugin.includes 属性以使其使用该文件。

于 2013-02-12T11:42:34.430 回答