有没有办法将spring-data-solr与Tika集成?

时间:2014-02-14 19:57:23

标签: solr solrj apache-tika solr-cell spring-data-solr

有没有办法通过配置将spring-data-solr与Tika一起使用?否则,对于spring-data-solr,有没有替代solrj的ContentStreamUpdateRequest+addfile

目前我正在以这种方式使用Solrj + Tika:

SolrServer server = new HttpSolrServer(URL);
...
Tika tika = new Tika();
...
String fileType = tika.detect(path.toFile());
up = new ContentStreamUpdateRequest("/update/extract"); 
up.addFile(path.toFile(), fileType);
up.setParam("literal.id", idField);
...
up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);
NamedList<Object> request = server.request(up);

我通过成功遵循此ExtractingRequestHandler指南来了解此方法。

使用solr 4.3.0,可以通过spring-data-solr得到相同的结果,而不必直接调用Solrj?

1 个答案:

答案 0 :(得分:1)

ContentStreamUpdateRequest没有直接支持。后退将在SolrCallback执行的SolrTemplate范围内执行。

NamedList<Object> result = solrTemplate.execute(new SolrCallback<NamedList<Object>>() {

  @Override
  public NamedList<Object> doInSolr(SolrServer solrServer) throws SolrServerException, IOException {
    Tika tika = new Tika();
    // ...
    String fileType = tika.detect(path.toFile());
    ContentStreamUpdateRequest up = new ContentStreamUpdateRequest("/update/extract");
    up.addFile(path.toFile(), fileType);
    up.setParam("literal.id", idField);
    // ...
    up.setAction(org.apache.solr.client.solrj.request.AbstractUpdateRequest.ACTION.COMMIT, true, true);
    NamedList<Object> request = solrServer.request(up);
  }

});

如果您需要在更多存储库中使用此类行为,那么这篇关于adding custom methods to all repositories的帖子可能会有所帮助。