从SolrDocument转换为类

时间:2017-02-06 02:19:41

标签: java solr

我需要将从Solr检索到的数据转换为特定的类,我尝试了3种不同的方法,但每种方法都有一些问题。

方法1:使用第三方库 - JSONUtil。

    SolrDocument solrDocument = (SolrDocument) iterator.next();
    String jsonString = JSONUtil.toJSON(solrDocument);
    EventObject eventObject2 = gson.fromJson(jsonString, EventObject.class);

方法2:直接将solrDocument转换为JsonString。

    String jsonString2 = gson.toJson(solrDocument);
    EventObject eventObject3 = gson.fromJson(jsonString2, EventObject.class);

方法3:将solrDocument转换为JSONObject,然后转换为JsonString。

    JSONObject object = new JSONObject(solrDocument);
    String jsonStringFromJsonObject = object.toString();
    EventObject eventObjectFromJsonObject = gson.fromJson(jsonStringFromJsonObject, EventObject.class);

方法4:使用Java Bean

    List<EventObject> EventObjects = response.getBeans(EventObject.class);

Method1 的结果无法处理 Date ArrayList Type的字段。 Method2 Method3 Method4 的结果完全相同,它们可以很好地处理所有字段,但 ArrayList 领域仍然是空的。

修改:

我的Solr架构如下(仅提及无法正确转换的2个字段):

<dynamicField name="*_Image_Infos" type="string" indexed="true" stored="true" required="false" multiValued="true" />
<dynamicField name="*_ss" type="string" indexed="true" stored="true" required="false" multiValued="true" />

我的EventObject如下:

public List<EventObjectImageInfo> ImageInfos = new ArrayList<EventObjectImageInfo>();
public List<EventObjectColor> Colors = new ArrayList<EventObjectColor>();

EventObjectImageInfo &amp; EventObjectColor 是我自己的类。

我做错了什么吗?或者我还有其他办法吗?谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用Solr JavaBeans

让我们说我有solr架构:

microservice

我有学生班

<field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
<field name="name" type="string" indexed="false" stored="true"/>
<field name="marks" type="long" multiValued="true" indexed="true" stored="true"/>

现在我可以使用javabeans将SolrDocumentList转换为List

public class Student {
    @Field
    String id;

    @Field
    String name;

    @Field
    ArrayList<Long> marks;
}