Solr搜索 - 如何防止位置哈希重复

时间:2013-02-05 17:36:19

标签: search solr lucene nutch

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

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在大多数页面上出现,所以我可以应用一些规则来过滤掉这些。它们用于跳过内容,而另一个用于切换辅助功能样式表。

3 个答案:

答案 0 :(得分:1)

您可以过滤以#中包含#的模式结尾的网址。 您可以在regex-urlfilter.txt

中指定要包含或排除的模式

这样只允许对根页面编制索引,并且排除带#的索引。

答案 1 :(得分:1)

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

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

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

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

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

答案 2 :(得分:0)

好的,我的工作正常,我所做的就是编辑 regex-normalize.xml 文件并告诉它忽略带有#的网址:

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

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