[ 
https://issues.apache.org/jira/browse/SOLR-1129?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Avlesh Singh updated SOLR-1129:
-------------------------------

    Attachment: SOLR-1129.patch

Adding a patch for this enhancement. 
Existing test cases pass. I'll add new test cases in 
{{TestDocumentObjectBinder}} shortly.

This is the approach I took.
# Dynamic fields can be annotated in the following manner
{code:java}
@Field("*_random")
public Map<String, Integer> random;

@Field("supplier_*")
public Map<String, String[]> suppliers;

@Field("oem_*")
public Map<String, List<String>> oem;
{code}
# Based on the {{value type}} of this {{Map}}, I populate all matching fields 
in the response with their corresponding value(s).
# I added one more clause to the {{DocField}}'s {{storeType}} method to take 
care of fields of type {{Map}}. Using {{getActualTypeArguments}} for this 
{{ParameterizedType}} value, I populate the existing properties in the 
{{DocField}} viz {{name, field, type, isArray, isList}} etc.
# I added a private method, {{getFieldValueByFieldName(SolrDocument sdoc, 
String fieldName)}} in the {{DocField}} class, which is now  being called by 
the {{inject}} method for all fields. For regular index fields, the method 
behavior has not changed. However, for a dynamic field (as annotated by the 
client), this method prepares a {{Map}} of matching fieldNames and their 
corresponding value(s). This in turn is used by the {{inject}} method to call 
the client bean's corresponding setter method.

Please note that this fix is for version 1.3.

Cheers
Avlesh

> SolrJ cannot bind dynamic fields to beans
> -----------------------------------------
>
>                 Key: SOLR-1129
>                 URL: https://issues.apache.org/jira/browse/SOLR-1129
>             Project: Solr
>          Issue Type: Improvement
>          Components: clients - java
>    Affects Versions: 1.3
>            Reporter: Noble Paul
>         Attachments: SOLR-1129.patch
>
>
> SolrJ does not support binding of dynamic fields to bean fields
> The field declaration could be as follows
> {code:java}
> @Field("*_s")
> public String anyString;
> {code}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to