`
lxwt909
  • 浏览: 566034 次
  • 性别: 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  
写博客不易,大家且看且珍惜,也希望大家多多提意见,时间匆忙,难免会有所纰漏。

相关推荐

Global site tag (gtag.js) - Google Analytics