【发布时间】:2018-10-21 07:11:42
【问题描述】:
我添加了 Tika 作为我的 StormCrawler 实现的参考,它可以在爬网中获取 PDF 文档。但是,Title、Authors 和其他属性不会被解析。我尝试了对'index.md.mapping:'的不同组合并将相应的属性添加到ES_IndexInit,但Kibana(索引)中PDF文档的内容字段是总是空的。一切都适用于 HTML 页面。如果我遗漏了什么或者我可以看一个例子,你能帮忙指点一下吗?
es-crawler.flux:
name: "crawler"
包括: - 资源:真 文件:“/crawler-default.yaml” 覆盖:假
- resource: false
file: "crawler-conf.yaml"
override: true
- resource: false
file: "es-conf.yaml"
override: true
喷口: - id:“喷口” 类名:“com.digitalpebble.stormcrawler.elasticsearch.persistence.AggregationSpout” 并行度:10
螺栓: - id:“分区器” 类名:“com.digitalpebble.stormcrawler.bolt.URLPartitionerBolt” 并行度:1 - id:“提取器” 类名:“com.digitalpebble.stormcrawler.bolt.FetcherBolt” 并行度:1 - id:“站点地图” 类名:“com.digitalpebble.stormcrawler.bolt.SiteMapParserBolt” 并行度:1 - id:“解析” 类名:“com.digitalpebble.stormcrawler.bolt.JSoupParserBolt” 并行度:5 - id:“索引” 类名:“com.digitalpebble.stormcrawler.elasticsearch.bolt.IndexerBolt” 并行度:1 - id:“状态” 类名:“com.digitalpebble.stormcrawler.elasticsearch.persistence.StatusUpdaterBolt” 并行度:1 - id:“status_metrics” 类名:“com.digitalpebble.stormcrawler.elasticsearch.metrics.StatusMetricsBolt” 并行度:4 - id:“redirection_bolt” 类名:“com.digitalpebble.stormcrawler.tika.RedirectionBolt” 并行度:1 - id:“parser_bolt” 类名:“com.digitalpebble.stormcrawler.tika.ParserBolt” 并行度:1
流: - 来自:“喷口” 至:“分区” 分组: 类型:随机播放
来自:“喷口” 至:“status_metrics” 分组: 类型:随机播放
来自:“分区器” 至:“取器” 分组: 类型:字段 参数:[“键”]
来自:“提取器” 至:“站点地图” 分组: 类型:LOCAL_OR_SHUFFLE
来自:“站点地图” 到:“解析” 分组: 类型:LOCAL_OR_SHUFFLE
来自:“解析” 至:“索引” 分组: 类型:LOCAL_OR_SHUFFLE
来自:“提取器” 至:“状态” 分组: 类型:字段 参数:[“网址”] streamId:“状态”
来自:“站点地图” 至:“状态” 分组: 类型:字段 参数:[“网址”] streamId:“状态”
来自:“解析” 至:“状态” 分组: 类型:字段 参数:[“网址”] streamId:“状态”
来自:“索引” 至:“状态” 分组: 类型:字段 参数:[“网址”] streamId:“状态”
来自:“解析” 至:“redirection_bolt” 分组: 类型:LOCAL_OR_SHUFFLE
来自:“redirection_bolt” 至:“parser_bolt” 分组: 类型:LOCAL_OR_SHUFFLE
来自:“redirection_bolt” 至:“索引” 分组: 类型:LOCAL_OR_SHUFFLE
来自:“parser_bolt” 至:“索引” 分组: 类型:LOCAL_OR_SHUFFLE
es-injector.flux:
name: "injector"
包括: - 资源:真 文件:“/crawler-default.yaml” 覆盖:假
- resource: false
file: "crawler-conf.yaml"
override: true
- resource: false
file: "es-conf.yaml"
override: true
- resource: false
file: "injection-conf.yaml"
override: true
组件: - id:“方案” 类名:“com.digitalpebble.stormcrawler.util.StringTabScheme” 构造函数参数: - 发现
喷口: - id:“喷口” 类名:“com.digitalpebble.stormcrawler.spout.FileSpout” 并行度:1 构造函数参数: - “。” - “种子.txt” - 参考:“方案”
螺栓: - id:“状态” 类名:“com.digitalpebble.stormcrawler.elasticsearch.persistence.StatusUpdaterBolt” 并行度:1 - id:“parser_bolt” 类名:“com.digitalpebble.stormcrawler.tika.ParserBolt” 并行度:1
流: - 来自:“喷口” 至:“状态” 分组: 类型:字段 参数:[“网址”]
pom.xml:
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>xyz.com</groupId>
<artifactId>search</artifactId>
<version>search1.0</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<executions>
<execution>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>java</executable>
<includeProjectDependencies>true</includeProjectDependencies>
<includePluginDependencies>false</includePluginDependencies>
<classpathScope>compile</classpathScope>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.3.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>org.apache.storm.flux.Flux</mainClass>
<manifestEntries>
<Change></Change>
<Build-Date></Build-Date>
</manifestEntries>
</transformer>
</transformers>
<!-- The filters below are necessary if you want to include the Tika
module -->
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-core</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>flux-core</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>com.digitalpebble.stormcrawler</groupId>
<artifactId>storm-crawler-core</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>com.digitalpebble.stormcrawler</groupId>
<artifactId>storm-crawler-elasticsearch</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>com.digitalpebble.stormcrawler</groupId>
<artifactId>storm-crawler-tika</artifactId>
<version>1.7</version>
</dependency>
</dependencies>
【问题讨论】:
-
您能分享一个您缺少字段的 URL 吗?您是否在 Kibana 中重新加载了索引定义? (如果您添加一个字段,它不会自动刷新)。您是否尝试过调试,例如在本地运行拓扑时使用 Eclipse?如何将 Tika 螺栓连接到拓扑的其余部分?您是否获得了 PDF 的文本内容?
-
感谢朱利安的回复。我正在尝试使用本地 url,但我正在处理的 pdf 是:adobe.com/digitalimag/pdfs/about_metadata.pdf。我确实刷新了 Kibana 中的定义。我还没有尝试调试[我将尝试使用 master 分支]。 PS:我已将我的文件添加到原始问题中。
-
我尝试使用这个“公共类 ParserBoltTest”测试用例测试 PDF url,但这总是失败并出现空指针异常。除了将正确的 url 放入 parse("...") 中之外,这些测试用例是否需要任何其他需要配置的先决条件?
标签: web-crawler apache-tika stormcrawler