读书人

nutch 搜寻流程 1-local search

发布时间: 2012-07-08 17:43:42 作者: rapoo

nutch 搜索流程 1-local search

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

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

?

一。流程
nutch 搜寻流程 1-local search

二。分析

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()处理。

?

?

?

?

?

读书人网 >开源软件

热点推荐