首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >支持深度分页的NamedList

支持深度分页的NamedList
EN

Stack Overflow用户
提问于 2017-02-03 03:10:07
回答 2查看 70关注 0票数 0
代码语言:javascript
运行
复制
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输出。

我尝试了下面的方法来获取结果。

代码语言:javascript
运行
复制
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输出。

有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2017-02-04 10:01:08

你有两种方法。

  1. 使用Solr export请求处理程序(或添加它)和wt=csv参数。为了清楚起见,这是一个甚至在较旧的Solr版本中也可用的Implicit Request Handler,专门设计用于处理正确导出数百万个records.
  2. implement深度分页的场景。我建议使用Yonic post paging and deep paging,它比你想象的要简单。但是在正确实现之后,您还需要自己创建csv文件。
票数 0
EN

Stack Overflow用户

发布于 2017-03-29 05:28:16

我找到的解决方案是:

代码语言:javascript
运行
复制
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
}

优点:

  1. 因为我不能立即得到结果,所以它更快。
  2. 输出是csv。
  3. 命中solr多个项目并不昂贵。

缺点:

  1. 结果不是唯一的,这意味着根据您正在提取的内容,可能会有重复的数据。

要获得唯一的结果,可以使用facets。

谢谢!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42010425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档