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输出。
有什么建议吗?
发布于 2017-02-04 10:01:08
你有两种方法。
wt=csv
参数。为了清楚起见,这是一个甚至在较旧的Solr版本中也可用的Implicit Request Handler,专门设计用于处理正确导出数百万个records.发布于 2017-03-29 05:28:16
我找到的解决方案是:
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
}
优点:
缺点:
要获得唯一的结果,可以使用facets。
谢谢!
https://stackoverflow.com/questions/42010425
复制相似问题