0

SolrJ を使用するときにループを使用しないようにする方法があるかどうかに興味がありました。

例えば。適切な Java ライブラリを使用してストレート SQL を使用する場合、Query の結果を返し、それをリストとしてキャストし、(Web アプリケーションで) 自分のビューに渡すことができます。

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応答の非ループ変換(関数型言語のマップ関数など)であるように見えます。Google の guava ライブラリは、このようなものを提供します。以下の例では、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 に答える