`
lxwt909
  • 浏览: 572262 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

跟益达学Solr5之使用Tika从PDF中提取数据导入索引

    博客分类:
  • Solr
阅读更多

         开始此篇之前,我假定你已经学会了如何在Tomcat下部署Solr5啦。即启动Tomcat后你能看到Solr5的Web UI界面。OK,下面直接进入正题。

         首先你需要在你的core根目录下新建一个lib目录来存放依赖的jar包,当然你也可以直接到依赖的jar包扔到Tomcat webapps目录下部署的solr程序的WEB-INF\lib目录下即如图:

 
 

这里我采用了另外一种方式,把依赖的jar包放当前core的lib目录下,这样做的好处是每个core依赖的jar包都存放在各自core的子目录下分类存放,更方便管理,全部扔tomcat下杂乱无章不好管理。如图新建lib目录:

 然后往lib目录copy一些 DIH依赖的jar包,如图:

 

 截图的那些jar包在solr5的解压包里都能找到,如果你实在找不到再来问我。然后solrconfig.xml配置文件里我们需要配置外部jar包的加载路径,如图配置:

 dir参数里的./即表示当前core根目录,regex表示一个正则表达式,目的就是为了批量指定j加载哪些jar包.然后配置我们的dataimport处理器并指定data-config.xml配置文件的加载路径,如图:

 然后编写配置我们的data-config.xml,如图:

url="C:/docs/solr-word.pdf"即表示对C:\docs目录下的solr-word.pdf文件进行文本提取并创建索引,format表示把提取到的文本当作什么类型的数据,默认支持text(纯文本),xml,json,html等格式,不配置format默认值就是text.

    然后我们需要在schema.xml文件里定义我们的域,如图:

 细心的你,肯定发现了我配置了IK分词器,IK分词器配置如图:

 刚才我已经在core根目录的lib下复制了IK分词器jar包,我们还需要在core\conf目录下复制一份IKAnalyzer.cfg.xml配置文件,如果你有自定义IK扩展字典,那么你还需要把扩展字典文件的加载路径配置在IKAnalyzer.cfg.xml文件里,如图:

 然后我们需要在C:/docs目录下放一个PDF文件进行测试,
solr-word.pdf这个测试PDF文件在solr5的解压目录下可以找到,如图:

 

 到此,准备工作就完成了,重启你的tomcat,访问你的Solr Web UI进行测试,如图:

 如果你执行后看到如图效果,就表明PDF导入Solr成功了,为了验证PDF成功导入Solr了,你可以切换到Query菜单进行查询验证,如图:

    OK,关于如果导入PDF到Solr5就介绍到这儿了。相关配置文件我待会儿会在底下的附件里打包上传一份供你们参考,但希望你们还是要自己动手操作下,不要仅仅是直接解压复制我提供的示例,只有于遇到问题并不断自虐的过程中你才能学到经验。(注意:由于jar包体积太大,ITeye无法上传,所以lib目录下的jar我没法上传,所以如果你找不到jar包,请联系我)

      间隔很久没写了,让大家等久了,不好意思哈,写博客不易,大家且看且珍惜,也希望大家多多提意见,时间匆忙,难免会有所纰漏。

      如果你还有什么问题请加我Q-Q:7-3-6-0-3-1-3-0-5,

或者加裙
一起交流学习!

      

 

    

 

 

  

 

 

 

     

     

         

  • 大小: 27.7 KB
  • 大小: 82.6 KB
  • 大小: 29.1 KB
  • 大小: 9.9 KB
  • 大小: 20.8 KB
  • 大小: 67.4 KB
  • 大小: 7 KB
  • 大小: 30.8 KB
  • 大小: 22.2 KB
  • 大小: 85.4 KB
  • 大小: 64.5 KB
  • 大小: 85.3 KB
  • 大小: 48.4 KB
  • 大小: 58.8 KB
11
0
分享到:
评论
7 楼 蜡笔小色妞 2016-06-28  
码农来了 写道
schmal的id主键要删掉,不然会报错

我把schmal.xml中的id域删掉会找不到我的core的
6 楼 蜡笔小色妞 2016-06-28  
当我的data-config.xml同博主的一样时会报这样的错
JDBC URL or JNDI name has to be specified Processin

然后我把data-config.xml配置改为如下配置就不会报错了

<dataConfig> 
<dataSource type="BinFileDataSource" />
<document>
<entity name="files" dataSource="binary" rootEntity="false"
processor="FileListEntityProcessor"  baseDir="D:\study"  fileName=".*.(doc)|(pdf)|(xls)|(ppt)|(docx)" recursive="false">
<field  column="fileAbsolutePath" name="id" />
<field  column="fileSize" name="size" />
<field  column="fileLastModified" name="lastModified" />
<entity name="documentImport" processor="TikaEntityProcessor" url="${files.fileAbsolutePath}"  ormat="text">
<field  column="Author" name="author" meta="true"/>
<field  column="title" name="title" meta="true"/>
<field  column="text" name="text"/>
</entity>
</entity>
</document>
</dataConfig>

有知道原因的帮忙解答一下
5 楼 码农来了 2015-12-31  
schmal的id主键要删掉,不然会报错
4 楼 码农来了 2015-12-31  
id 主键要删除掉
3 楼 林奇峰 2015-09-10  
您好,我按照你的教程做了一遍,大多数文件可以建立索引,但是有一个文件报错了
WARN  Specified stream length 767 is wrong. Fall back to reading stream until 'endstream'.
WARN  Parsing Error, Skipping Object
java.io.IOException: Error: Expected an integer type at offset 13299968
        at org.apache.pdfbox.pdfparser.BaseParser.readInt(BaseParser.java:1668)
        at org.apache.pdfbox.pdfparser.BaseParser.readGenerationNumber(BaseParser.java:1639)
        at org.apache.pdfbox.pdfparser.PDFParser.parseObject(PDFParser.java:619)
        at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:203)
        at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1239)
        at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1204)
        at org.apache.tika.parser.pdf.PDFParser.parse(PDFParser.java:132)
        at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:281)
        at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:281)
        at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:120)
        at org.apache.solr.handler.dataimport.TikaEntityProcessor.nextRow(TikaEntityProcessor.java:162)
        at org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:243)
        at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:475)
        at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:514)
        at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:414)
        at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:329)
        at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:232)
        at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:416)
        at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:480)
        at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:461)
WARN  Parsing Error, Skipping Object
java.io.IOException: Error: Expected a long type at offset 13301386, instead got ')'
        at org.apache.pdfbox.pdfparser.BaseParser.readLong(BaseParser.java:1695)
        at org.apache.pdfbox.pdfparser.BaseParser.readObjectNumber(BaseParser.java:1623)
        at org.apache.pdfbox.pdfparser.PDFParser.parseObject(PDFParser.java:614)
        at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:203)
        at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1239)
        at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1204)
        at org.apache.tika.parser.pdf.PDFParser.parse(PDFParser.java:132)
        at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:281)
        at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:281)
        at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:120)
        at org.apache.solr.handler.dataimport.TikaEntityProcessor.nextRow(TikaEntityProcessor.java:162)
        at org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:243)
        at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:475)
        at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:514)
        at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:414)
        at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:329)
        at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:232)
        at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:416)
        at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:480)
        at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:461)
WARN  Corrupt object reference
WARN  Specified stream length 5471 is wrong. Fall back to reading stream until 'endstream'.
WARN  Specified stream length 2283 is wrong. Fall back to reading stream until 'endstream'.
INFO  [core] webapp=/solr path=/tikadataimport params={indent=true&command=status&_=1441875734192&wt=json} status=0 QTime=0
INFO  [core] webapp=/solr path=/tikadataimport params={indent=true&command=status&_=1441875736210&wt=json} status=0 QTime=1
INFO  [core] webapp=/solr path=/tikadataimport params={indent=true&command=status&_=1441875738618&wt=json} status=0 QTime=0
INFO  [core] webapp=/solr path=/tikadataimport params={indent=true&command=status&_=1441875740636&wt=json} status=0 QTime=0
ERROR Exception while processing: files document : null:org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to read content Processing Document # 1
        at org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow(DataImportHandlerException.java:70)
        at org.apache.solr.handler.dataimport.TikaEntityProcessor.nextRow(TikaEntityProcessor.java:168)
        at org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:243)
        at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:475)
        at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:514)
        at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:414)
        at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:329)
        at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:232)
        at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:416)
        at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:480)
        at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:461)
Caused by: org.apache.tika.exception.TikaException: Unexpected RuntimeException from org.apache.tika.parser.pdf.PDFParser@57519a2f
        at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:283)
        at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:281)
        at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:120)
        at org.apache.solr.handler.dataimport.TikaEntityProcessor.nextRow(TikaEntityProcessor.java:162)
        ... 9 more
Caused by: java.lang.RuntimeException: java.io.IOException: Unknown dir object c=')' cInt=41 peek=')' peekInt=41 18223
        at org.apache.pdfbox.pdfparser.PDFStreamParser$1.tryNext(PDFStreamParser.java:198)
        at org.apache.pdfbox.pdfparser.PDFStreamParser$1.hasNext(PDFStreamParser.java:205)
        at org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:255)
        at org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:235)
        at org.apache.pdfbox.util.PDFStreamEngine.processStream(PDFStreamEngine.java:215)
        at org.apache.pdfbox.util.PDFTextStripper.processPage(PDFTextStripper.java:460)
        at org.apache.pdfbox.util.PDFTextStripper.processPages(PDFTextStripper.java:385)
        at org.apache.pdfbox.util.PDFTextStripper.writeText(PDFTextStripper.java:344)
        at org.apache.tika.parser.pdf.PDF2XHTML.process(PDF2XHTML.java:141)
        at org.apache.tika.parser.pdf.PDFParser.parse(PDFParser.java:148)
        at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:281)
        ... 12 more
Caused by: java.io.IOException: Unknown dir object c=')' cInt=41 peek=')' peekInt=41 18223
        at org.apache.pdfbox.pdfparser.BaseParser.parseDirObject(BaseParser.java:1362)
        at org.apache.pdfbox.pdfparser.BaseParser.parseCOSArray(BaseParser.java:1066)
        at org.apache.pdfbox.pdfparser.PDFStreamParser.parseNextToken(PDFStreamParser.java:276)
        at org.apache.pdfbox.pdfparser.PDFStreamParser.access$000(PDFStreamParser.java:49)
        at org.apache.pdfbox.pdfparser.PDFStreamParser$1.tryNext(PDFStreamParser.java:193)
        ... 22 more

INFO  [core] webapp=/solr path=/tikadataimport params={optimize=false&indent=true&clean=true&commit=true&verbose=false&command=full-import&debug=false&wt=json} status=0 QTime=28 {d
eleteByQuery=*:* (-1511916287916244992)} 0 9828
ERROR Full Import failed:java.lang.RuntimeException: java.lang.RuntimeException: org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to read content Processing Do
cument # 1
        at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:270)
        at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:416)
        at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:480)
        at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:461)
Caused by: java.lang.RuntimeException: org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to read content Processing Document # 1
        at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:416)
        at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:329)
        at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:232)
        ... 3 more
Caused by: org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to read content Processing Document # 1
        at org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow(DataImportHandlerException.java:70)
        at org.apache.solr.handler.dataimport.TikaEntityProcessor.nextRow(TikaEntityProcessor.java:168)
        at org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:243)
        at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:475)
        at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:514)
        at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:414)
        ... 5 more
Caused by: org.apache.tika.exception.TikaException: Unexpected RuntimeException from org.apache.tika.parser.pdf.PDFParser@57519a2f
        at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:283)
        at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:281)
        at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:120)
        at org.apache.solr.handler.dataimport.TikaEntityProcessor.nextRow(TikaEntityProcessor.java:162)
        ... 9 more
Caused by: java.lang.RuntimeException: java.io.IOException: Unknown dir object c=')' cInt=41 peek=')' peekInt=41 18223
        at org.apache.pdfbox.pdfparser.PDFStreamParser$1.tryNext(PDFStreamParser.java:198)
        at org.apache.pdfbox.pdfparser.PDFStreamParser$1.hasNext(PDFStreamParser.java:205)
        at org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:255)
        at org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:235)
        at org.apache.pdfbox.util.PDFStreamEngine.processStream(PDFStreamEngine.java:215)
        at org.apache.pdfbox.util.PDFTextStripper.processPage(PDFTextStripper.java:460)
        at org.apache.pdfbox.util.PDFTextStripper.processPages(PDFTextStripper.java:385)
        at org.apache.pdfbox.util.PDFTextStripper.writeText(PDFTextStripper.java:344)
        at org.apache.tika.parser.pdf.PDF2XHTML.process(PDF2XHTML.java:141)
        at org.apache.tika.parser.pdf.PDFParser.parse(PDFParser.java:148)
        at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:281)
        ... 12 more
Caused by: java.io.IOException: Unknown dir object c=')' cInt=41 peek=')' peekInt=41 18223
        at org.apache.pdfbox.pdfparser.BaseParser.parseDirObject(BaseParser.java:1362)
        at org.apache.pdfbox.pdfparser.BaseParser.parseCOSArray(BaseParser.java:1066)
        at org.apache.pdfbox.pdfparser.PDFStreamParser.parseNextToken(PDFStreamParser.java:276)
        at org.apache.pdfbox.pdfparser.PDFStreamParser.access$000(PDFStreamParser.java:49)
        at org.apache.pdfbox.pdfparser.PDFStreamParser$1.tryNext(PDFStreamParser.java:193)
        ... 22 more
2 楼 u011643314 2015-09-09  
赞,在跟你学solr呢。。。
1 楼 zzxiaoman 2015-06-26  
写博客不易,大家且看且珍惜,也希望大家多多提意见,时间匆忙,难免会有所纰漏。

相关推荐

    跟益达学Solr5之从MySQL数据库导入数据并索引

    《跟益达学Solr5之从MySQL数据库导入数据并索引》这篇文章主要探讨了如何使用Apache Solr 5从MySQL数据库中导入数据并建立索引,以便进行高效的全文搜索。Solr是一款强大的开源搜索服务器,它提供了丰富的查询语言、...

    跟益达学Solr5之索引文件夹下所有文件

    总之,"跟益达学Solr5之索引文件夹下所有文件"教程涵盖了从安装配置Solr5,创建核心,配置文件索引,到数据导入,查询优化以及监控维护等一系列步骤。通过学习这些内容,你可以掌握如何利用Solr5构建一个强大的文件...

    跟益达学Solr5之增量索引MySQL数据库表数据

    在这个主题“跟益达学Solr5之增量索引MySQL数据库表数据”中,我们将深入探讨如何利用Solr 5来实现对MySQL数据库表数据的增量索引,以便在搜索时获得实时更新的结果。 首先,我们需要理解什么是增量索引。在传统的...

    跟益达学Solr5之索引网络上远程文件

    在Solr5中,我们可以通过配置和插件来实现对远程文件的索引,这对于处理网络上的大量非结构化数据尤为实用。 1. **配置远程文件系统(如FTP或HTTP)**:Solr支持通过插件集成多种文件系统,如FTP和HTTP,以便直接...

    跟益达学Solr5之批量索引JSON数据

    3. 使用Post工具:Solr提供了一个名为`post.jar`的工具,可以方便地将JSON数据导入到索引中。在命令行中执行: ```bash java -Dc=&lt;collection_name&gt; -jar post.jar -json file: ``` 其中`&lt;collection_name&gt;`是你的...

    跟益达学Solr5之使用IK分词器

    本篇将围绕“跟益达学Solr5之使用IK分词器”这一主题,详细讲解如何在Solr5中集成并运用IK分词器,以及它的工作原理和优化技巧。 首先,让我们了解下什么是分词器。在中文搜索引擎中,由于中文句子没有明显的分隔符...

    跟益达学Solr5之使用Ansj分词器

    《跟益达学Solr5之使用Ansj分词器》 在中文信息检索和文本分析领域,分词是至关重要的第一步。Solr,作为一款强大的开源搜索平台,提供了多种分词器供用户选择,其中之一就是Ansj分词器。这篇文章将深入探讨如何在...

    转自:跟益达学Solr5之玩转post.jar

    《跟益达学Solr5之玩转post.jar》这篇博文主要探讨了如何利用Solr的`post.jar`工具进行数据导入,这是Solr提供的一个非常实用的功能,用于快速将各种格式的数据导入到Solr索引中。在这个过程中,我们不仅会了解`post...

    跟益达学Solr5之使用MMSeg4J分词器

    本篇文章将带你深入学习如何在Solr5中集成并使用MMSeg4J分词器,提升中文处理能力。 首先,我们来了解一下MMSeg4J。这是一个高效、灵活的Java实现的中文分词库,它采用了基于词频的动态最大匹配算法(MaxMatch),...

    跟益达学Solr5之拼音分词

    在Solr5中,拼音分词主要依赖于第三方插件,如Pinyin4j或Solr的 contrib模块中的`solr-pinyin`。这些插件能够将中文字符转换为对应的拼音,以便在索引和查询过程中进行处理。Pinyin4j是一个Java库,它可以将汉字转换...

    Solr 权威指南上下卷

    国内较早接触Solr的技术专家之一,长期致力于Solr的技术研究、实践和生产环境部署,是Solr社区的积极参与者和实践者,以让Solr技术能够在中国得到广泛应用不遗余力并乐此不疲。现就职于国美金融,曾就职于各种大大...

    实益达:2021年半年度报告.PDF

    【深圳市实益达科技股份有限公司2021年半年度报告】...总结来说,实益达科技2021年半年度报告揭示了公司在复杂经济环境下的运营挑战,强调了风险管理,并提供了详尽的财务数据,为投资者提供了深入理解公司状况的机会。

    实益达:首次公开发行股票招股说明书.PDF

    实益达:首次公开发行股票招股说明书.PDF

    益达新产品男士益达推出市场广告策划书学习教案.pptx

    5. **广告策略**:虽然具体内容未详述,但可以推测文档中可能会讨论针对男士益达产品的广告创意、目标受众定位、媒介选择、广告执行计划等方面,这些都是成功推广新产品的关键步骤。 6. **市场潜力与机会**:男性...

Global site tag (gtag.js) - Google Analytics