索引文件夹中的文件

时间:2013-03-08 19:02:14

标签: solr lucene indexing sphinx

如何索引特定文件夹中的所有doc文件? 假设我有mydocuments个文件夹,其中包含docdocx个文件。我需要索引该文件夹中的所有文件以进行有效搜索。您可以为doc文件的索引文件夹建议什么? 注意:我已经查找了sphinx,但它似乎仅索引xml和mssql。

2 个答案:

答案 0 :(得分:1)

我的回答适用于Lucene。

Lucene没有“直接”提供API来索引文件或文件夹的内容。我们要做的是

  • 解析文件。您可以使用支持解析各种文件的Apache Tika
  • 使用该信息填充Lucene Document对象。
  • 将该文档传递给IndexWriter.addDocument()
  • 对每个文件重复上述步骤,即索引中的每个不同条目。

直接索引的问题,即使存在,也会导致字段创建和选择与特定文档中的该字段相关的内容失去灵活性。

以下是一个很好的教程,您可以在其中找到示例代码:Lucene in 5 minutes

答案 1 :(得分:1)

我认为您的问题是索引某个文件夹中的文本文件列表。所以,这是一个索引它们的示例代码。但是,如果要索引word文档,则需要更改getDocument方法以解析和填充Lucene文档。

关键点是:

  1. 创建IndexWriter。
  2. 使用dir.listFiles()方法获取文件夹中的文件列表。
  3. 遍历文件并在a处创建一个Lucene文档 时间
  4. 将Lucene文档添加到索引。
  5. 完成文档添加后,提交更改并关闭indexWriter。
  6. 如果您正在寻找解析和阅读word文档或PDF文件,那么您需要使用Apache POIPDFBox库。

    请注意我只使用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;
        }
    
    
    }