如何索引特定文件夹中的所有doc文件?
假设我有mydocuments
个文件夹,其中包含doc
和docx
个文件。我需要索引该文件夹中的所有文件以进行有效搜索。您可以为doc
文件的索引文件夹建议什么?
注意:我已经查找了sphinx,但它似乎仅索引xml和mssql。
答案 0 :(得分:1)
我的回答适用于Lucene。
Lucene没有“直接”提供API来索引文件或文件夹的内容。我们要做的是
直接索引的问题,即使存在,也会导致字段创建和选择与特定文档中的该字段相关的内容失去灵活性。
以下是一个很好的教程,您可以在其中找到示例代码:Lucene in 5 minutes
答案 1 :(得分:1)
我认为您的问题是索引某个文件夹中的文本文件列表。所以,这是一个索引它们的示例代码。但是,如果要索引word文档,则需要更改getDocument方法以解析和填充Lucene文档。
关键点是:
如果您正在寻找解析和阅读word文档或PDF文件,那么您需要使用Apache POI和PDFBox库。
请注意我只使用RAMDirectory类进行演示,而是需要使用FSDirectory。
我希望能解决你的问题。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;
public class IndexFolders {
public static void main(String[] args) throws FileNotFoundException, IOException{
String path = args[0];
File dir = new File(path);
Directory indexDir = new RAMDirectory();
Version version = Version.LUCENE_40;
Analyzer analyzer = new StandardAnalyzer(version);
IndexWriterConfig config = new IndexWriterConfig(version, analyzer);
IndexWriter indexWriter = new IndexWriter(indexDir, config);
for (File file : dir.listFiles()){
indexWriter.addDocument(getDocument(file));
}
indexWriter.commit();
indexWriter.close();
}
public static Document getDocument(File file) throws FileNotFoundException
{
Scanner input = new Scanner(file);
StringBuilder builder = new StringBuilder();
while(input.hasNext()){
builder.append(input.nextLine());
}
Document document = new Document();
document.add(new Field("text", builder.toString(),org.apache.lucene.document.TextField.TYPE_STORED));
return document;
}
}