You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by no...@apache.org on 2009/12/02 12:57:17 UTC
svn commit: r886127 - in /lucene/solr/trunk/src:
solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java
test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java
Author: noble
Date: Wed Dec 2 11:57:15 2009
New Revision: 886127
URL: http://svn.apache.org/viewvc?rev=886127&view=rev
Log:
SOLR-1516 SolrInputDocument cannot process dynamic fields
Modified:
lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java
lucene/solr/trunk/src/test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java
Modified: lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java?rev=886127&r1=886126&r2=886127&view=diff
==============================================================================
--- lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java (original)
+++ lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java Wed Dec 2 11:57:15 2009
@@ -76,9 +76,19 @@
}
SolrInputDocument doc = new SolrInputDocument();
- for( DocField field : fields ) {
- doc.setField( field.name, field.get( obj ), 1.0f );
- }
+ 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( e.getKey(), e.getValue(), 1.0f);
+ }
+ } else {
+ doc.setField(field.name, field.get(obj), 1.0f);
+ }
+ }
return doc;
}
Modified: lucene/solr/trunk/src/test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java?rev=886127&r1=886126&r2=886127&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java (original)
+++ lucene/solr/trunk/src/test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java Wed Dec 2 11:57:15 2009
@@ -25,12 +25,14 @@
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.SolrInputField;
import org.apache.solr.common.SolrDocument;
+import org.apache.solr.common.util.Hash;
import org.apache.solr.common.util.NamedList;
import org.junit.Assert;
import java.io.StringReader;
import java.util.Arrays;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -100,6 +102,15 @@
item.inStock = false;
item.categories = new String[] { "aaa", "bbb", "ccc" };
item.features = Arrays.asList( item.categories );
+ List<String> supA = Arrays.asList( new String[] { "supA1", "supA2", "supA3" } );
+ List<String> supB = Arrays.asList( new String[] { "supB1", "supB2", "supB3"});
+ item.supplier = new HashMap<String, List<String>>();
+ item.supplier.put("supplier_supA", supA);
+ item.supplier.put("supplier_supB", supB);
+
+ item.supplier_simple = new HashMap<String, String>();
+ item.supplier_simple.put("sup_simple_supA", "supA_val");
+ item.supplier_simple.put("sup_simple_supB", "supB_val");
DocumentObjectBinder binder = new DocumentObjectBinder();
SolrInputDocument doc = binder.toSolrInputDocument( item );
@@ -113,10 +124,38 @@
Assert.assertEquals( item.inStock, out.inStock );
Assert.assertEquals( item.categories.length, out.categories.length );
Assert.assertEquals( item.features, out.features );
+ Assert.assertEquals( supA,out.supplier.get("supplier_supA"));
+ Assert.assertEquals( supB, out.supplier.get("supplier_supB"));
+ Assert.assertEquals( item.supplier_simple.get("sup_simple_supB"), out.supplier_simple.get("sup_simple_supB"));
+
Assert.assertEquals( item.id, singleOut.id );
Assert.assertEquals( item.inStock, singleOut.inStock );
Assert.assertEquals( item.categories.length, singleOut.categories.length );
Assert.assertEquals( item.features, singleOut.features );
+ Assert.assertEquals( supA, singleOut.supplier.get("supplier_supA"));
+ Assert.assertEquals( supB, singleOut.supplier.get("supplier_supB"));
+ Assert.assertEquals( item.supplier_simple.get("sup_simple_supB"), out.supplier_simple.get("sup_simple_supB"));
+
+// put back "out" as Bean, to see if both ways work as you would expect
+// but the Field that "allSuppliers" need to be cleared, as it is just for
+// retrieving data, not to post data
+ out.allSuppliers = null;
+ SolrInputDocument doc1 = binder.toSolrInputDocument( out );
+
+ SolrDocumentList docs1 = new SolrDocumentList();
+ docs1.add( ClientUtils.toSolrDocument(doc1) );
+ Item out1 = binder.getBeans( Item.class, docs1 ).get( 0 );
+
+ Assert.assertEquals( item.id, out1.id );
+ Assert.assertEquals( item.inStock, out1.inStock );
+ Assert.assertEquals( item.categories.length, out1.categories.length );
+ Assert.assertEquals( item.features, out1.features );
+
+ Assert.assertEquals( item.supplier_simple.get("sup_simple_supB"), out1.supplier_simple.get("sup_simple_supB"));
+
+ Assert.assertEquals( supA,out1.supplier.get("supplier_supA"));
+ Assert.assertEquals( supB, out1.supplier.get("supplier_supB"));
+
}
public static class Item {
@@ -139,6 +178,9 @@
@Field("supplier_*")
Map<String, List<String>> supplier;
+
+ @Field("sup_simple_*")
+ Map<String, String> supplier_simple;
private String[] allSuppliers;
Re: svn commit: r886127 - in /lucene/solr/trunk/src:
solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java
test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java
Posted by Noble Paul നോബിള് नोब्ळ् <no...@corp.aol.com>.
fixed. Thanks Hoss
On Fri, Dec 11, 2009 at 7:01 AM, Chris Hostetter
<ho...@fucit.org> wrote:
>
> Noble:
> 1) you *have* to include a CHANGES.txt entry for every non-trivial commit
> ... if it has a Jira issue, there better be a CHANGES.txt entry, and the
> CHANGES.txt entry really needs to be in the same atomic commit as the rest
> of the changes, not a follow up commit, so code changes can be correlated
> to why the change was made.
>
> 2) CHANGES.txt entries must cite teh person who contributed the patch.
>
> 3) you have to be careful to cite the correct Jira issue when making
> commits -- this commit doesn't seem to have anything to do with SOLR-1516,
> i'm pretty sure it was for SOLR-1357
>
> ...with out all three of these things, it's nearly impossible to audit
> changes later and understand what they were, and who they came from.
>
>
> : Date: Wed, 02 Dec 2009 11:57:17 -0000
> : From: noble@apache.org
> : Reply-To: solr-dev@lucene.apache.org
> : To: solr-commits@lucene.apache.org
> : Subject: svn commit: r886127 - in /lucene/solr/trunk/src:
> : solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java
> : test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java
> :
> : Author: noble
> : Date: Wed Dec 2 11:57:15 2009
> : New Revision: 886127
> :
> : URL: http://svn.apache.org/viewvc?rev=886127&view=rev
> : Log:
> : SOLR-1516 SolrInputDocument cannot process dynamic fields
> :
> : Modified:
> : lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java
> : lucene/solr/trunk/src/test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java
> :
> : Modified: lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java
> : URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java?rev=886127&r1=886126&r2=886127&view=diff
> : ==============================================================================
> : --- lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java (original)
> : +++ lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java Wed Dec 2 11:57:15 2009
> : @@ -76,9 +76,19 @@
> : }
> :
> : SolrInputDocument doc = new SolrInputDocument();
> : - for( DocField field : fields ) {
> : - doc.setField( field.name, field.get( obj ), 1.0f );
> : - }
> : + 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( e.getKey(), e.getValue(), 1.0f);
> : + }
> : + } else {
> : + doc.setField(field.name, field.get(obj), 1.0f);
> : + }
> : + }
> : return doc;
> : }
> :
> :
> : Modified: lucene/solr/trunk/src/test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java
> : URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java?rev=886127&r1=886126&r2=886127&view=diff
> : ==============================================================================
> : --- lucene/solr/trunk/src/test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java (original)
> : +++ lucene/solr/trunk/src/test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java Wed Dec 2 11:57:15 2009
> : @@ -25,12 +25,14 @@
> : import org.apache.solr.common.SolrInputDocument;
> : import org.apache.solr.common.SolrInputField;
> : import org.apache.solr.common.SolrDocument;
> : +import org.apache.solr.common.util.Hash;
> : import org.apache.solr.common.util.NamedList;
> : import org.junit.Assert;
> :
> : import java.io.StringReader;
> : import java.util.Arrays;
> : import java.util.Date;
> : +import java.util.HashMap;
> : import java.util.List;
> : import java.util.Map;
> :
> : @@ -100,6 +102,15 @@
> : item.inStock = false;
> : item.categories = new String[] { "aaa", "bbb", "ccc" };
> : item.features = Arrays.asList( item.categories );
> : + List<String> supA = Arrays.asList( new String[] { "supA1", "supA2", "supA3" } );
> : + List<String> supB = Arrays.asList( new String[] { "supB1", "supB2", "supB3"});
> : + item.supplier = new HashMap<String, List<String>>();
> : + item.supplier.put("supplier_supA", supA);
> : + item.supplier.put("supplier_supB", supB);
> : +
> : + item.supplier_simple = new HashMap<String, String>();
> : + item.supplier_simple.put("sup_simple_supA", "supA_val");
> : + item.supplier_simple.put("sup_simple_supB", "supB_val");
> :
> : DocumentObjectBinder binder = new DocumentObjectBinder();
> : SolrInputDocument doc = binder.toSolrInputDocument( item );
> : @@ -113,10 +124,38 @@
> : Assert.assertEquals( item.inStock, out.inStock );
> : Assert.assertEquals( item.categories.length, out.categories.length );
> : Assert.assertEquals( item.features, out.features );
> : + Assert.assertEquals( supA,out.supplier.get("supplier_supA"));
> : + Assert.assertEquals( supB, out.supplier.get("supplier_supB"));
> : + Assert.assertEquals( item.supplier_simple.get("sup_simple_supB"), out.supplier_simple.get("sup_simple_supB"));
> : +
> : Assert.assertEquals( item.id, singleOut.id );
> : Assert.assertEquals( item.inStock, singleOut.inStock );
> : Assert.assertEquals( item.categories.length, singleOut.categories.length );
> : Assert.assertEquals( item.features, singleOut.features );
> : + Assert.assertEquals( supA, singleOut.supplier.get("supplier_supA"));
> : + Assert.assertEquals( supB, singleOut.supplier.get("supplier_supB"));
> : + Assert.assertEquals( item.supplier_simple.get("sup_simple_supB"), out.supplier_simple.get("sup_simple_supB"));
> : +
> : +// put back "out" as Bean, to see if both ways work as you would expect
> : +// but the Field that "allSuppliers" need to be cleared, as it is just for
> : +// retrieving data, not to post data
> : + out.allSuppliers = null;
> : + SolrInputDocument doc1 = binder.toSolrInputDocument( out );
> : +
> : + SolrDocumentList docs1 = new SolrDocumentList();
> : + docs1.add( ClientUtils.toSolrDocument(doc1) );
> : + Item out1 = binder.getBeans( Item.class, docs1 ).get( 0 );
> : +
> : + Assert.assertEquals( item.id, out1.id );
> : + Assert.assertEquals( item.inStock, out1.inStock );
> : + Assert.assertEquals( item.categories.length, out1.categories.length );
> : + Assert.assertEquals( item.features, out1.features );
> : +
> : + Assert.assertEquals( item.supplier_simple.get("sup_simple_supB"), out1.supplier_simple.get("sup_simple_supB"));
> : +
> : + Assert.assertEquals( supA,out1.supplier.get("supplier_supA"));
> : + Assert.assertEquals( supB, out1.supplier.get("supplier_supB"));
> : +
> : }
> :
> : public static class Item {
> : @@ -139,6 +178,9 @@
> :
> : @Field("supplier_*")
> : Map<String, List<String>> supplier;
> : +
> : + @Field("sup_simple_*")
> : + Map<String, String> supplier_simple;
> :
> : private String[] allSuppliers;
> :
> :
> :
>
>
>
> -Hoss
>
>
--
-----------------------------------------------------
Noble Paul | Systems Architect| AOL | http://aol.com
Re: svn commit: r886127 - in /lucene/solr/trunk/src:
solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java
test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java
Posted by Chris Hostetter <ho...@fucit.org>.
Noble:
1) you *have* to include a CHANGES.txt entry for every non-trivial commit
... if it has a Jira issue, there better be a CHANGES.txt entry, and the
CHANGES.txt entry really needs to be in the same atomic commit as the rest
of the changes, not a follow up commit, so code changes can be correlated
to why the change was made.
2) CHANGES.txt entries must cite teh person who contributed the patch.
3) you have to be careful to cite the correct Jira issue when making
commits -- this commit doesn't seem to have anything to do with SOLR-1516,
i'm pretty sure it was for SOLR-1357
...with out all three of these things, it's nearly impossible to audit
changes later and understand what they were, and who they came from.
: Date: Wed, 02 Dec 2009 11:57:17 -0000
: From: noble@apache.org
: Reply-To: solr-dev@lucene.apache.org
: To: solr-commits@lucene.apache.org
: Subject: svn commit: r886127 - in /lucene/solr/trunk/src:
: solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java
: test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java
:
: Author: noble
: Date: Wed Dec 2 11:57:15 2009
: New Revision: 886127
:
: URL: http://svn.apache.org/viewvc?rev=886127&view=rev
: Log:
: SOLR-1516 SolrInputDocument cannot process dynamic fields
:
: Modified:
: lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java
: lucene/solr/trunk/src/test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java
:
: Modified: lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java
: URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java?rev=886127&r1=886126&r2=886127&view=diff
: ==============================================================================
: --- lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java (original)
: +++ lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java Wed Dec 2 11:57:15 2009
: @@ -76,9 +76,19 @@
: }
:
: SolrInputDocument doc = new SolrInputDocument();
: - for( DocField field : fields ) {
: - doc.setField( field.name, field.get( obj ), 1.0f );
: - }
: + 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( e.getKey(), e.getValue(), 1.0f);
: + }
: + } else {
: + doc.setField(field.name, field.get(obj), 1.0f);
: + }
: + }
: return doc;
: }
:
:
: Modified: lucene/solr/trunk/src/test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java
: URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java?rev=886127&r1=886126&r2=886127&view=diff
: ==============================================================================
: --- lucene/solr/trunk/src/test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java (original)
: +++ lucene/solr/trunk/src/test/org/apache/solr/client/solrj/beans/TestDocumentObjectBinder.java Wed Dec 2 11:57:15 2009
: @@ -25,12 +25,14 @@
: import org.apache.solr.common.SolrInputDocument;
: import org.apache.solr.common.SolrInputField;
: import org.apache.solr.common.SolrDocument;
: +import org.apache.solr.common.util.Hash;
: import org.apache.solr.common.util.NamedList;
: import org.junit.Assert;
:
: import java.io.StringReader;
: import java.util.Arrays;
: import java.util.Date;
: +import java.util.HashMap;
: import java.util.List;
: import java.util.Map;
:
: @@ -100,6 +102,15 @@
: item.inStock = false;
: item.categories = new String[] { "aaa", "bbb", "ccc" };
: item.features = Arrays.asList( item.categories );
: + List<String> supA = Arrays.asList( new String[] { "supA1", "supA2", "supA3" } );
: + List<String> supB = Arrays.asList( new String[] { "supB1", "supB2", "supB3"});
: + item.supplier = new HashMap<String, List<String>>();
: + item.supplier.put("supplier_supA", supA);
: + item.supplier.put("supplier_supB", supB);
: +
: + item.supplier_simple = new HashMap<String, String>();
: + item.supplier_simple.put("sup_simple_supA", "supA_val");
: + item.supplier_simple.put("sup_simple_supB", "supB_val");
:
: DocumentObjectBinder binder = new DocumentObjectBinder();
: SolrInputDocument doc = binder.toSolrInputDocument( item );
: @@ -113,10 +124,38 @@
: Assert.assertEquals( item.inStock, out.inStock );
: Assert.assertEquals( item.categories.length, out.categories.length );
: Assert.assertEquals( item.features, out.features );
: + Assert.assertEquals( supA,out.supplier.get("supplier_supA"));
: + Assert.assertEquals( supB, out.supplier.get("supplier_supB"));
: + Assert.assertEquals( item.supplier_simple.get("sup_simple_supB"), out.supplier_simple.get("sup_simple_supB"));
: +
: Assert.assertEquals( item.id, singleOut.id );
: Assert.assertEquals( item.inStock, singleOut.inStock );
: Assert.assertEquals( item.categories.length, singleOut.categories.length );
: Assert.assertEquals( item.features, singleOut.features );
: + Assert.assertEquals( supA, singleOut.supplier.get("supplier_supA"));
: + Assert.assertEquals( supB, singleOut.supplier.get("supplier_supB"));
: + Assert.assertEquals( item.supplier_simple.get("sup_simple_supB"), out.supplier_simple.get("sup_simple_supB"));
: +
: +// put back "out" as Bean, to see if both ways work as you would expect
: +// but the Field that "allSuppliers" need to be cleared, as it is just for
: +// retrieving data, not to post data
: + out.allSuppliers = null;
: + SolrInputDocument doc1 = binder.toSolrInputDocument( out );
: +
: + SolrDocumentList docs1 = new SolrDocumentList();
: + docs1.add( ClientUtils.toSolrDocument(doc1) );
: + Item out1 = binder.getBeans( Item.class, docs1 ).get( 0 );
: +
: + Assert.assertEquals( item.id, out1.id );
: + Assert.assertEquals( item.inStock, out1.inStock );
: + Assert.assertEquals( item.categories.length, out1.categories.length );
: + Assert.assertEquals( item.features, out1.features );
: +
: + Assert.assertEquals( item.supplier_simple.get("sup_simple_supB"), out1.supplier_simple.get("sup_simple_supB"));
: +
: + Assert.assertEquals( supA,out1.supplier.get("supplier_supA"));
: + Assert.assertEquals( supB, out1.supplier.get("supplier_supB"));
: +
: }
:
: public static class Item {
: @@ -139,6 +178,9 @@
:
: @Field("supplier_*")
: Map<String, List<String>> supplier;
: +
: + @Field("sup_simple_*")
: + Map<String, String> supplier_simple;
:
: private String[] allSuppliers;
:
:
:
-Hoss