QueryRequest req=new QueryRequest(solrQuery);
NoOpResponseParser responseParser = new NoOpResponseParser();
responseParser.setWriterType("csv");
searcherServer.setParser(responseParser);
NamedList<Object> resp=searcherServer.request(req);
QueryResponse res = searcherServer.query(solrQuery);
responseString = (String)resp.get("response");
我使用上面的代码以CSV格式获取输出。我想要获取的数据是巨大的(数十亿)。所以我想包括SOLR的深度分页并获得大量的CSV输出。有办法吗?此外,使用当前版本的SOLR(我无法升级),我必须使用上面的代码来获取CSV输出。
我尝试了以下方法来获取结果。
searcherServer = new HttpSolrServer(url);
SolrQuery solrQuery = new SolrQuery();
solrQuery.setQuery(query);
solrQuery.set("fl","field1");
solrQuery.setParam("wt", "csv");
solrQuery.setStart(0);
solrQuery.setRows(1000);
solrQuery.setSort(SolrQuery.SortClause.asc("field2"));
在上面代码的输出中有wt为javabin。所以我无法获得CSV输出。
有什么建议吗?
答案 0 :(得分:0)
你有两种方式。
使用Solr export请求处理程序(或添加它)和wt=csv
参数。需要明确的是,即使在较旧的Solr版本中,这也是Implicit Request Handler通常可用的,专门用于处理涉及导出数百万条记录的场景。
正确实现深度分页。我建议Yonic发帖paging and deep paging,比你想象的要容易。但是,在您正确实施之后,您还需要自己创建csv文件。
答案 1 :(得分:0)
我找到的解决方案是:
SolrQuery solrQuery = new SolrQuery();
solrQuery.setQuery(query); //what you want to fetch
QueryResponse res = searcherServer.query(solrQuery);
int numFound = (int)res.getResults().getNumFound();
int rowsToBeFetched = (numFound > 1000 ? (int)(numFound/6) : numFound);
for(int i=0; i< numFound; i=i+rowsToBeFetched ){
solrQuery.set("fl","fieldToBeFetched");
solrQuery.setParam("wt", "csv");
solrQuery.setStart(i);
solrQuery.setRows(rowsToBeFetched);
QueryRequest req=new QueryRequest(solrQuery);
NoOpResponseParser responseParser = new NoOpResponseParser();
responseParser.setWriterType("csv");
searcherServer.setParser(responseParser);
NamedList<Object> resp=searcherServer.request(req);
responseString = (String)resp.get("response"); //This is in CSV format
}
优点:
缺点:
要获得独特的结果,您可以使用构面。
谢谢!