2013-02-05 31 views
0

我从搜索到的内部网站获取结果。问题是我得到,因为在代码中使用位置散列的多个结果:Solr搜索 - 如何防止重复位置哈希

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 

虽然他们都可能是相关的,它看起来并不好当他们是我的前四位的结果! 任何方式他们可以被看作是一个结果?

它看起来像#和#内容出现在大多数页面上,所以我可以应用一些规则来过滤掉。他们习惯跳到内容,而用另一个来切换辅助功能样式表。

回答

0

OK我得到这个工作,我所做的是编辑正则表达式,normalize.xml文件,并告诉它忽略以#网址,在其中:

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

我需要添加“urlfilter正则表达式“到nutch-site.xml中的plugin.includes属性以使其使用此文件。

1

您可以过滤以#为模式结尾的网址。 您可以指定要包含或排除在regex-urlfilter.txt

这将允许只有根页面被编入索引,并且用#排除被编入索引的页面。

+0

谢谢。我试过编辑这个文件,但仍然得到哈希值。 我所做的就是将其添加到此行: '#跳过包含某些字符作为可能查询等的网址。 - [?*!@ =#]' – Shano

+0

OK我得到了这个工作,问题是它没有在我将urlfilter-regex添加到plugin.includes属性之前,请不要关注我的更改。 – Shano

+0

多数民众赞成在... – Jayendra

1

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

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

而最后的选项我心目中是在URL字段,如下所示使用PatternReplaceCharFilterFactory

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

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