[ 
https://issues.apache.org/jira/browse/SOLR-1357?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12784163#action_12784163
 ] 

Lars Grote commented on SOLR-1357:
----------------------------------

Thanks for the claification!
Indeed that would be VERY bad design. But it is not what I intended to do. This 
would be the behavior if I had copied the loop of Jean. In the Patch the loop 
has a modification.

Have look at the inner loop. I think this should solve the problem.
{code:title=DocumentObjectBinder.java Line 91 to 102}
    for (DocField field : fields) {
                if (field.dynamicFieldNamePatternMatcher != null
                                && field.get(obj) != null && 
field.isContainedInMap) {
                        Map<String, Object> mapValue = (HashMap<String, 
Object>) field
                                        .get(obj);

                        for (Map.Entry<String, Object> e : mapValue.entrySet()) 
{
                                doc.setField(field.name.replaceFirst("\\*", 
e.getKey()), e.getValue(), 1.0f);
                        }
                } else {
                        doc.setField(field.name, field.get(obj), 1.0f);
                }
        }
{code}

I think I'll create a patch for the testcase too, then we can see the behavior 
more clearly. 

What do you think about the snippet above? Do I miss something?
Regards ,Lars


> SolrInputDocument cannot process dynamic fields
> -----------------------------------------------
>
>                 Key: SOLR-1357
>                 URL: https://issues.apache.org/jira/browse/SOLR-1357
>             Project: Solr
>          Issue Type: Improvement
>          Components: clients - java
>            Reporter: Avlesh Singh
>            Assignee: Noble Paul
>         Attachments: SOLR-1357.patch
>
>
> Adding data via {{SolrInputDocument}} is normally done by calling the 
> {{addField}} method with a field name, field value and an optional boost.  In 
> case of dynamic fields, if field names are known upfront, then caller of this 
> method just passes in the right name and it automatically works.
> This does not go well with users who use {...@interface Field}} annotations 
> for automatic binding. 
> As of SOLR-1129, users can annotate {{Map<String, String> propertyName}} with 
> {...@field ("field_*")}} kind of annotations to bind dynamic field data to. 
> {{SolrInputDocument}} should exhibit the same behavior.  The field {{value}} 
> currently supported are - primitive, array, collection or an instance of 
> Iterable. It can also take {{Map}} as values. If the field, for which 
> {{addField}} method is called, is of dynamicField type (which can be derived 
> from the field name), then the keys of the {{Map}}, passed as value, should 
> be used to "compose" the correct field name.
> This should be supported
> {code:java}
> //This code sample should populate the dynamic fields "brands_Nokia" and 
> "brands_Samsung"
> public class MyBean{
>   @Field("brands_*)
>   Map<String, Integer> brands;
>   
>   ...
> }
> Map<String, String> brands= new HashMap<String, String>();
> brands.put("Nokia", 1000);
> brands.put("Samsung", 100);
> MyBean myBean = new MyBean();
> myBean.setBrands(brands);
> solrServer.addBean(myBean);
> {code}
> We can think of supporting this too ...
> {code:java}
> //This code sample should populate the dynamic fields "brands_Nokia" and 
> "brands_Samsung"
> Map<String, String> brands= new HashMap<String, String>();
> brands.put("Nokia", 1000);
> brands.put("Samsung", 100);
> SolrInputDocument doc = new SolrInputDocument();
> doc.addField("brands_*", brands);
> {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