[
https://issues.apache.org/jira/browse/SOLR-193?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12504342
]
Ryan McKinley commented on SOLR-193:
------------------------------------
> The basic structure in the new patch looks fine by the way, no real concerns
> from me once the comments are cleaned up (one question: should SolrDocument
> implement Map<String,Collection<Object>> ??)
If the class implements Map, JSTL treats it differently -- for example,
${doc.fieldNames} does not call:
Collection<String> getFieldNames();
it calls: Map.get( "fieldNames" );
this is really annoying! Essentially any real function you add is hidden
(unless i'm incompetent in JSTL land...)
This is why I had:
+ ///////////////////////////////////////////////////////////////////
+ // Utility functions to help JSTL (map interface to single field
+ ///////////////////////////////////////////////////////////////////
+
+ public Map<String,Collection<Object>> getValuesMap()
+ {
+ return _fields;
+ }
+
+ public Map<String,Object> getValueMap() {
+ return new Map<String,Object>() {
+ // The only reason we are implementing map!
+ public Object get(Object key) {
+ return getFieldValue( (String)key);
+ }
+
+ // Easily Supported methods
+ public boolean containsKey(Object key) { return _fields.containsKey( key
); }
+ public Set<String> keySet() { return _fields.keySet(); }
+ public int size() { return _fields.size(); }
+ public boolean isEmpty() { return _fields.isEmpty(); }
+
+ // Unsupported operations. These are not necessary for JSTL
+ public void clear() { throw new UnsupportedOperationException(); }
+ public boolean containsValue(Object value) {throw new
UnsupportedOperationException();}
+ public Set<java.util.Map.Entry<String, Object>> entrySet() {throw new
UnsupportedOperationException();}
+ public Object put(String key, Object value) {throw new
UnsupportedOperationException();}
+ public void putAll(Map<? extends String, ? extends Object> t) {throw new
UnsupportedOperationException();}
+ public Object remove(Object key) {throw new
UnsupportedOperationException();}
+ public Collection<Object> values() {throw new
UnsupportedOperationException();}
+ };
+ }
I would still like to include these in the API.
> General SolrDocument interface to manage field values.
> ------------------------------------------------------
>
> Key: SOLR-193
> URL: https://issues.apache.org/jira/browse/SOLR-193
> Project: Solr
> Issue Type: New Feature
> Reporter: Ryan McKinley
> Assignee: Ryan McKinley
> Attachments: SOLR-193-SimpleSolrDocument.patch,
> SOLR-193-SimpleSolrDocument.patch, SOLR-193-SolrDocument.patch,
> SOLR-193-SolrDocument.patch, SOLR-193-SolrDocument.patch,
> SOLR-193-SolrDocument.patch, SOLR-193-SolrDocument.patch,
> SOLR-193-SolrDocument.patch
>
>
> In an effort to make SOLR-139 (the "modify" command) more manageable, i
> extracted out a large chunk. This patch adds a general SolrDocument
> interface and includes a concrete implementation (SimpleSolrDoc)
> SOLR-139 needs some way to transport document values independent of the
> lucene Document. This is required for the INCREMENT command and useful for
> modifying documents. SolrDocument is also generally useful for SOLR-20
> - - - - - -
> The one (potentially) controversial part is that I added a function to
> FieldType:
> public Object toExternalValue(Fieldable f);
> This asks each field type to convert its Fieldable into its real type, for
> example IntField.java has:
> public Integer toExternalValue(Fieldable f) {
> return Integer.valueOf( toExternal(f) );
> }
> By default, it returns a string value. If this addition is too much, there
> are other (less clean) ways to handle the INCREMENT command. My real
> motivation for this addition is that it makes it possible to implement an
> embeddable SOLR-20 client that does not need an HTTP connection.
> - - - -
> The SimpleSolrDoc implementation was written for SOLR-20. It needs to play
> nice with EL, so it implements a few extra map function that may not seem
> necessary:
> ${doc.values['name']]} gets a collection
> ${doc.valueMap['name']]} gets a single value for the field
> - - - -
> The tests cover all "toExternalValue" changes in schema.*
> SimpleSolrDoc and DocumentBuilder have 100% test coverage.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.