我必须构建一个应用程序,我必须搜索属于PDF,DOC,DOCX等文件。我想使用Solr索引包含所有文件的整个目录,然后在文档中搜索单词。
在网上看,我看到更快的方法是使用DIH。我用这种方式设置了这家旅馆:
solrconfig.xml中
<requestHandler name="/update/extract"
startup="lazy"
class="solr.extraction.ExtractingRequestHandler" >
<lst name="defaults">
<str name="lowernames">true</str>
<str name="uprefix">ignored_</str>
<!-- capture link hrefs but ignore div attributes -->
<str name="captureAttr">true</str>
<str name="fmap.a">links</str>
<str name="fmap.div">ignored_</str>
</lst>
</requestHandler>
solr的数据-config.xml中
<dataConfig>
<dataSource type="BinFileDataSource" name="bin"/>
<document>
<entity name="sd"
processor="FileListEntityProcessor"
baseDir="C:\Solr\solr-5.0.0\docs\myFolder\"
fileName=".*\.(doc)|(pdf)|(docx)"
recursive="true"
rootEntity="false"
transformer="DateFormatTransformer">
<entity name="tika-test" processor="TikaEntityProcessor" url="${sd.fileAbsolutePath}"
format="text">
<field column="text" name="text"/>
</entity>
<field column="fileSize" name="size" />
<field column="file" name="filename" />
</entity>
</document>
</dataConfig>
当我从DataImport(Web管理页面)启动“执行”时,我得到:
Indexing completed. Added/Updated: 1 documents. Deleted 0 documents. (Duration: 03s)
Requests: 0 (0/s), Fetched: 329 (110/s), Skipped: 0, Processed: 1
我在这个folter中有很多doc,pdf和docx(显示为... 329)但只有第一个已被处理,如果我执行查询,我只得到文件名...任何内容。
"response": {
"numFound": 1,
"start": 0,
"docs": [
{
"fileName": "first_doc.doc",
"id": "4a06f6de-870d-4db9-875d-cd8dbd17309d"
}
]
}
哪里错了?
答案 0 :(得分:3)
我假设你使用的是Apache Solr 5.0 ......我也遇到了你遇到的同样问题。
这似乎与一个问题有关,最近已经解决了这个问题:
https://issues.apache.org/jira/browse/SOLR-7174
如果您检查Solr的主干版本并使用它,您将看到此问题已修复,如果您想自己测试,我会为您留下一些链接。
svn.apache.org/repos/asf/lucene/dev/trunk/ - &gt; SOLR结账链接 https://wiki.apache.org/solr/HowToCompileSolr - &gt;如何编译SOLR并将其与当前安装一起使用
或者,您可以等待新的SOLR版本,这应该解决此问题。