Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 你能用solrj避免for循环吗?_Sql_Spring_Hibernate_Solr_Solrj - Fatal编程技术网

Sql 你能用solrj避免for循环吗?

Sql 你能用solrj避免for循环吗?,sql,spring,hibernate,solr,solrj,Sql,Spring,Hibernate,Solr,Solrj,我很好奇在使用SolrJ时是否有避免使用循环的方法 比如说。如果我使用直接SQL,使用适当的java库,我可以返回一个查询结果并将其作为列表进行分类,然后将其传递到我的视图(在webapp中) SolrJ(SolrQuery和QueryResponse)似乎无法返回简洁的列表。这意味着我必须创建一个迭代器来遍历每个返回文档,并获得我想要的值,这并不理想 这里是否有我遗漏的东西,是否有避免这些看似无用的循环的方法?SOLRJ wiki提供了一个示例,可以满足您的需求: 基本上: QueryRes

我很好奇在使用SolrJ时是否有避免使用循环的方法

比如说。如果我使用直接SQL,使用适当的java库,我可以返回一个查询结果并将其作为列表进行分类,然后将其传递到我的视图(在webapp中)

SolrJ(SolrQuery和QueryResponse)似乎无法返回简洁的列表。这意味着我必须创建一个迭代器来遍历每个返回文档,并获得我想要的值,这并不理想


这里是否有我遗漏的东西,是否有避免这些看似无用的循环的方法?

SOLRJ wiki提供了一个示例,可以满足您的需求:

基本上:

QueryResponse rsp = server.query( query );
SolrDocumentList docs = rsp.getResults();
List<Item> beans = rsp.getBeans(Item.class);
QueryResponse rsp=server.query(查询);
SolrDocumentList docs=rsp.getResults();
listbeans=rsp.getbean(Item.class);
编辑:

根据您在下面的评论,您想要的似乎是SOLR响应的非循环转换(例如,函数式语言中的映射函数)。谷歌的番石榴图书馆提供了类似的东西。下面的示例假设您的SOLR响应有一个“name”字段,您希望返回一个列表:

QueryResponse rsp = server.query(query);
SolrDocumentList docs = rsp.getResults();

List<String> names = Lists.transform(docs, new Function<String,SolrDocument>() {
    @Override
    public String apply(SolrDocument d) {
        return (String)d.get("name");
    }
}); 
QueryResponse rsp=server.query(查询);
SolrDocumentList docs=rsp.getResults();
列表名称=Lists.transform(文档,新函数(){
@凌驾
公共字符串应用(SolrDocument d){
返回(字符串)d.get(“名称”);
}
}); 
不幸的是,java并不很好地支持这种编程风格,因此函数式方法最终比简单的循环更冗长(可能更不清晰):

QueryResponse rsp = server.query(query);
SolrDocumentList docs = rs.getResults();
List<String> names = new ArrayList<String>();
for (SolrDocument d : docs) names.add(d.get("name"));
QueryResponse rsp=server.query(查询);
SolrDocumentList docs=rs.getResults();
列表名称=新的ArrayList();
对于(solrdocumentd:docs)名称,添加(d.get(“name”);

即使你有一个列表,你最终也必须对它进行迭代,对吗?到底有什么区别?不完全一样(至少我理解是这样)。它允许您定义一个表示返回的文档类型的类。假设您有一个包含id和名称的索引。如果我查询名称字段,我只需要返回一个与我在名称字段上的查询匹配的ID的平面列表。如果你不想将其转换为java bean,那么只需使用SolrDocumentList,它派生自ArrayList:这仍然没有完全的帮助,但我相信你。我需要它在字符串列表中,而不是数组列表中。我的观点是,它需要一个额外的转换,以使它成为一个可用的形式。