实现搜索文档(PDF,XML,HTML,MS Word)的最佳方法是什么?

编写搜索function以在java Web应用程序中搜索文档的好方法是什么?

“标记搜索”是否适合此类搜索function?

为什么重新发明轮子?

查看Apache Lucene 。

另外,搜索Stack Overflow进行“全文搜索”,你会发现很多其他非常相似的问题。 这是另一个,例如: 如何在网站中实现搜索function?

你可以使用位于Lucene之上的Solr ,它是一个真正的网络搜索引擎应用程序,而Lucene是一个库。 但是,Solr或Lucene都不会解析Word文档,pdf等来提取元数据信息。 有必要根据预定义的文档架构索引文档。

至于提取Office文档的文本内容(在将它提供给Lucene之前需要做的),有一个Apache Tika项目,它支持很多文件格式 ,包括Microsoft的文件格式 。

使用Tika,从文件中获取文本的代码非常简单:

import org.apache.tika.exception.TikaException; import org.apache.tika.metadata.Metadata; import org.apache.tika.parser.AutoDetectParser; import org.apache.tika.sax.BodyContentHandler; import org.apache.tika.parser.Parser; // exception handling not shown Parser parser = new AutoDetectParser(); StringWriter textBuffer = new StringWriter(); InputStream input = new FileInputStream(file); Metadata md = new Metadata(); md.set(Metadata.RESOURCE_NAME_KEY, file.getName()); parser.parse(input, new BodyContentHandler(textBuffer), md); String text = textBuffer.toString() 

到目前为止,Tika 0.3似乎运作良好。 只需抛出任何文件,它将返回对该格式最有意义的内容。 我可以获取索引到目前为止我已经抛出的任何内容的文本,包括PDF和新的MS Office文件。 如果某些格式存在问题,我认为它们主要在于获取格式化文本提取而不仅仅是原始明文。

只是为了更新

还有另一种选择,而不是Solr,称为“ ElasticSearch ”,它是一个具有良好function的项目,类似于Solr,但是无模式。

两个项目都建立在Lucene之上。