Solr 9.1集成Tesseract OCR无输出问题排查求助
背景
在Solr 8.11.2(搭配Tika 1.27)环境中,曾通过修改tika-parsers-1.27.jar内的TesseractOCRConfig.properties文件,成功实现Tesseract 5.2.0的OCR文本提取,配置内容如下:
tesseractPath=C:/Tesseract-OCR tessdataPath=C:/Tesseract-OCR/tessdata/ language=dan
问题现象
将相同的Tesseract安装配置复用至Solr 9.1(搭配Tika 1.28.4)环境后,JPG文件可被正常提取但无OCR结果。对比同一张JPG文件的x_parsed_by字段:
- Solr 9.1中字段值:
"x_parsed_by":["org.apache.tika.parser.DefaultParser", "org.apache.tika.parser.jpeg.JpegParser"], - Solr 8.11.2中字段值:
"x_parsed_by":["org.apache.tika.parser.DefaultParser", "org.apache.tika.parser.ocr.TesseractOCRParser", "org.apache.tika.parser.jpeg.JpegParser"],
明显可见Solr 9.1未触发TesseractOCRParser执行OCR操作。
排查与解决步骤
1. 检查Tika依赖包结构变化
Tika 1.28.x版本开始,OCR相关组件从原tika-parsers包拆分至独立的tika-parsers-ocr模块。需确认Solr 9.1的classpath中是否包含tika-parsers-ocr-1.28.4.jar,以及配套的tika-core、tika-parsers-standard-package等依赖包,若缺失需补充对应jar包。
2. 调整Tesseract配置方式
Tika 1.28+不再推荐直接修改jar包内的配置文件,建议通过自定义tika-config.xml实现配置:
- 在Solr核心的
conf目录下创建tika-config.xml,添加Tesseract配置:<?xml version="1.0" encoding="UTF-8"?> <properties> <parsers> <parser class="org.apache.tika.parser.ocr.TesseractOCRParser"> <params> <param name="tesseractPath" type="string">C:/Tesseract-OCR</param> <param name="tessdataPath" type="string">C:/Tesseract-OCR/tessdata/</param> <param name="language" type="string">dan</param> </params> </parser> </parsers> </properties> - 在Solr的
solrconfig.xml中指定该配置文件路径,确保Tika加载时读取:<updateRequestProcessorChain name="add-unknown-fields-to-the-schema"> <processor class="solr.TikaEntityProcessorFactory"> <str name="tikaConfig">${solr.core.config}/tika-config.xml</str> </processor> <!-- 保留原有其他处理器配置 --> </updateRequestProcessorChain>
3. 验证Tesseract可执行文件的可用性
- 确认Solr运行用户对
C:/Tesseract-OCR/tesseract.exe拥有执行权限; - 检查路径拼写是否正确(Windows环境注意斜杠/与反斜杠\的格式,配置中两种均可识别);
- 手动执行
tesseract --version确认Tesseract本身可正常运行,且tessdata目录下存在dan.traineddata语言包。
4. 查看Solr日志定位错误
检查Solr日志文件(如solr.log),搜索tesseract、OCR、TesseractOCRParser等关键词,确认是否存在解析器加载失败、路径找不到、语言包缺失等错误信息,这些日志能直接定位问题根源。
5. 确认Tika解析器触发逻辑
Tika 1.28+中,JpegParser默认可能不会自动触发OCR解析,需确保TesseractOCRParser被正确注册为辅助解析器。可在tika-config.xml中添加如下配置,让图片类文件优先触发OCR解析:
<parsers> <parser class="org.apache.tika.parser.DefaultParser"> <params> <param name="ocrStrategy" type="string">OCR_ONLY</param> </params> </parser> <!-- 保留TesseractOCRParser配置 --> </parsers>
内容的提问来源于stack exchange,提问作者Blem

