nutch 搜索流程 1-local search

nutch搜索时进行了querys优化处理,包括缓存等。

为了对实际的搜索过程进行分析,让我们来对现成的搜索代码进行分析。

 

一。流程

二。分析

1.initiated nutch query

利用Query来parse生成,具体分成三步:

*NutchAnalysis.parseQuery():如果根据指定语言没有找到指定analyzer,则使用默认的NutchdocumentAnalyzer。其实这个default analyzer是一个encapsulator,如果是anchor则使用AnchorAnalyzer,否则使用ContentAnalzyer。

然后,利用javacc定义好的Lexical analyzer来对query进行normalization,这部分形如一般的查询系统一样必要,所以不进行討論。

最后 返回 一个Nutch query。

 

*fixed query:对上述的query中unkown fields进行phase query转换。

*initiate query conditions 包括形如start offset ,hitsPerSite,sort etc。

 

2.query filters

根据已经注册的query plugins进行filter。其中BasicQueryFilter是必须的,fitler时有一个步骤不是很明确:

addSloppyPhase() 从名字上看好像是说可选的phase,而且在最后看到对于每个field,它的原则都 是Occur.SHOULD。所以我猜测,它将所有的terms合并成一个phase query是为了提高查询的精确度,that is context related! right ?

这个可以在大量数据集的情况下可以调试比较。

 

3.optimized query

有意思的是,Nutch的reverse与否使用 不同的查询策略。如果是ascending,则使用Limit来限制;否则直接使用lucene的query。觉得有点可疑 ,为什么要这样区分 而不是同一使用limit?这是为了减少内存使用?ascending容易实现?

觉得都不是太对。

 

4.retireve results

index其实就是一个相关性检测和过滤检索前提,后面就是依据index no,uniquekey,url等metadata进行ParseText,ParseData等数据的处理,这步要利用hadoop来检索。

Fragment: 代表个基本的text元素

Highlight,Ellipsis:继承自fragment

以上三个是由BasicSummarier处理的。

而最終的显示是由Summary.toHTML()处理。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值