如何将整个本地硬盘驱动器编入Apache Solr?

时间:2013-10-10 00:48:32

标签: java linux search solr lucene

是否有一种很好的方法可以将Solr或客户端库提供给Solr来索引整个硬盘驱动器。这应包括zip文件中的内容,包括zip文件中的zip文件递归?

这应该可以在Linux上运行(没有仅限Windows的客户端)。

这当然包括从根(或实际上任何文件夹)对整个文件系统进行单次扫描。我不关心这一点,保持索引是最新的,只是最初创建它。这与Google停止使用的旧“Google桌面”应用类似。

1 个答案:

答案 0 :(得分:2)

您可以使用SolrJ API操作Solr。

以下是API文档:http://lucene.apache.org/solr/4_0_0/solr-solrj/index.html

这里有一篇关于如何使用SolrJ索引硬盘上文件的文章 http://blog.cloudera.com/blog/2012/03/indexing-files-via-solr-and-java-mapreduce/

文件由InputDocument表示,您使用.addField附加您希望稍后搜索的字段。

以下是索引驱动程序的示例代码:

public class IndexDriver extends Configured implements Tool {     

  public static void main(String[] args) throws Exception {
    //TODO: Add some checks here to validate the input path
    int exitCode = ToolRunner.run(new Configuration(),
     new IndexDriver(), args);
    System.exit(exitCode);
  }

  @Override
  public int run(String[] args) throws Exception {
    JobConf conf = new JobConf(getConf(), IndexDriver.class);
    conf.setJobName("Index Builder - Adam S @ Cloudera");
    conf.setSpeculativeExecution(false);

    // Set Input and Output paths
    FileInputFormat.setInputPaths(conf, new Path(args[0].toString()));
    FileOutputFormat.setOutputPath(conf, new Path(args[1].toString()));
    // Use TextInputFormat
    conf.setInputFormat(TextInputFormat.class);

    // Mapper has no output
    conf.setMapperClass(IndexMapper.class);
    conf.setMapOutputKeyClass(NullWritable.class);
    conf.setMapOutputValueClass(NullWritable.class);
    conf.setNumReduceTasks(0);
    JobClient.runJob(conf);
    return 0;
  }
}

阅读article了解详情。

压缩文件 以下是处理压缩文件的信息:Using Solr CELL's ExtractingRequestHandler to index/extract files from package formats

似乎有一些错误,Solr没有处理zip文件,这是带有修复的bug报告:https://issues.apache.org/jira/browse/SOLR-2416