0

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

例如。如果我要使用直接 SQL,使用适当的 java 库,我可以返回一个 Query 结果并将其转换为 List 并将其传递给我的视图(在 webapp 中)。

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

我在这里遗漏了什么,是否可以避免这些看似无用的循环?

4

1 回答 1

2

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

https://wiki.apache.org/solr/Solrj#Reading_Data_from_Solr

基本上:

QueryResponse rsp = server.query( query );
SolrDocumentList docs = rsp.getResults();
List<Item> beans = rsp.getBeans(Item.class);

编辑:

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

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");
    }
}); 

不幸的是,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"));
于 2013-02-08T16:16:33.957 回答