使用Solr索引日志文件

时间:2013-09-20 18:15:28

标签: solr indexing

我必须索引位于递归目录结构中的日志文件(每个目录可以有一个或多个文件和目录)。日志文件具有各种不同的扩展名。搜索将基于日志文件的文本。包含特定字符串(搜索关键字)的所有文件应与搜索结果的名称和完整路径一起出现。

我尝试使用DIH tika,但似乎仅适用于一个文件。我尝试了FileListEntityprocessor,但无法使其正常工作。

如何使用Solr索引这些日志文件。如果有人这样做,请帮助我。

提前致谢。

P.S。单个日志文件不是很大,但整体数据量很大。

2 个答案:

答案 0 :(得分:1)

我会做这样的事情:

  1. 让一个系统生成与您的搜索匹配的输入目录。
  2. 有一项功能可以将匹配的日志或这些目录中的部分解析到RAM solr文档中。
  3. 通过迭代器将目录或目录集中的文档流式传输到solr:

    HttpSolrServer server = new HttpSolrServer();
    Iterator<SolrInputDocument> iter = new Iterator<SolrInputDocument>(){
      public boolean hasNext() {
          boolean result ;
          // set the result to true false to say if you have more documensts
          return result;
      }
    
      public SolrInputDocument next() {
          SolrInputDocument result = null;
          // construct a new document here and set it to result
          return result;
      }
    };
    server.add(iter);
    
  4. 请在此处查看此方法和其他方法:http://wiki.apache.org/solr/Solrj#Streaming_documents_for_an_update

答案 1 :(得分:1)

TikaEntityProcessor可与FileListEntityProcessor一起使用。

数据-config.xml中

<dataConfig>
    <dataSource name="bin" type="BinFileDataSource"/>
    <document>
        <entity name="f" dataSource="null" rootEntity="false"
            processor="FileListEntityProcessor" transformer="TemplateTransformer"
            baseDir="L:/Documents/65923/"
            fileName=".*\.*" onError="skip" recursive="true">

            <field column="fileAbsolutePath" name="path" />
            <field column="fileSize" name="size" />
            <field column="fileLastModified" name="lastmodified" />

            <entity name="tika-test" dataSource="bin" processor="TikaEntityProcessor" url="${f.fileAbsolutePath}" format="text" onError="skip">
                <field column="Author" name="author" meta="true"/>
                <field column="title" name="title" meta="true"/>
                <field column="text" name="content"/>   
            </entity>
        </entity>
    </document>
</dataConfig>