nutch对某个contentType文档进行解析的流程

nutch支持对诸多的文档类型作了解析处理,包括html,xml,zip,pdf等,其中好像从1.1以后提供了tika的进一步封装处理。

 

1.说明

在fetch的output()时会发现,它调用了ParseUtil的parse()进行处理。

nutch执行解析时有个优先级原则,即parse-plugins.xml是可选的 ,如果存在,则使用,不存在的话直接从plugin.includes中所有parser plugins根据conent type比较,一样的话就接受。

 

所有要想使用相关的parser plugins,必须要做到一点:

  在plugin.includes中添加相应的plugin id。

 

另外,要注意的是如果有同类的plugin定义的话,如果执行是顺序的,必须要在相应的xxx.order属性下设置,否则执行顺序是不确定的。我看到nutch-default.xml中说是如果没有在xxxx.order中定义的话,将按plugin.includes中的顺序执行,这是错误的,因为代码中实现是hashmap,然后通过其中的values()直接返回的;如果使用linkedhashmap的话可能没问题。

 

 parse-plugins.xml

  这个文件定义了plugin-id的映射关系,即通过content type取哪个Plugin来处理。其中包含二部分:

  a)mimeType 这个元素定义了content-type与extension的映射,当然一个content-type可以由多个extensions来按优先级执行(当然了只会执行一个),所以其中有个order属性,但是可选的。

 

  b)alias 这里才是根据上述定义的plugin-id对应到真正的extension-id映射。

 综上所述,其中这里定义的plugin-id只是一个中间命名一样,最終比较的却是content type和extension id。

所以要想mimeType中的plugin有效,必须要在alias添加对应的映射。

 

 

2.下面从流程开始说起。

1)如果有parse-plugins.xml定义映射关系,否则进入2)

1.1)根据定义的conent-type与plugin.includes中的相应parser插件进行content type和extension id的对比,如果全匹配就添加到返回列表;否则只是简单地进行extension id的比较,此时表明相应的plugin.xml没有指定parameter来支持contentType或不匹配。


2)根据plugin.includes中的parser plugins进行content type对比。

3)如果经过1,2处理后仍然没有找到合适的parser list,则从parse-plugin.xml中取出 contentType为*的plugin ids,重复1)。

 

4)根据parser list按优先级对content type的content进行最終的parse操作。

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(content)