[ 
https://issues.apache.org/jira/browse/SOLR-193?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12504095
 ] 

Ryan McKinley commented on SOLR-193:
------------------------------------


For background.  This class has functionality used for other issues including 
SOLR-104, SOLR-139.  For a while i tried keeping the functionality in different 
patches, but it became too much of a nightmare to maintain.  Perhaps it would 
be better to leave out the edge cases and just focus on the SolrDocument 
interface now...


> what is setDistinctByDefault, or setDistinctOrderMatters ?
> 

These options let you say if the field values should be backed by a Map<String> 
or a List<String>, the DistinctOrderMatters says if it should be Map<String> or 
LinkedHashMap<String>

These were useful for SOLR-104 when you SQL join a table and may get duplicate 
rows, but only want the distinct values to keep fields.

Now that you point it out, (and there is a good chance it will be in trunk 
soon) It would make more sense to implement these features as different 
subclasses of SimpleSolrDocument.


> Also, what is the purpose/use of DocumentBuilder.build and 
> DocumentBuilder.loadStoredFields 

This is for SOLR-139.  to 'modify' a document, you load the existing Document - 
change it - then store it back.

These two functions can happily live in a new class, and could be attached to 
SOLR-139.


>   2) I thought the SolrDocument API was for incoming documents ... 

I hope it is also useful for modifying existing Documents and transforming 
incoming/outgoing documents (but I'll raise that issue later ;)


> I think it's a mistake to try and have one single Interface for all three. 
> ... At the very least there should be a seperate API for the indexing side 
> and the query side (because of the boost issue) which can be  
> subclass/superclass relationships.
> 

This sounds fine.  We should *defiantly* solve any know problems with the 
Lucene document interface.  Just using an interface (rather then a concrete 
class) will be a huge help.

Is the only difference between the input Document and output Document that it 
has boosts?

Should we have:
 SolrDocument
   + BoostedSolrDocument

 or

 SolrDocument
   + IndexSolrDocument

Any thoughts on the common use case where I want to pull a document out of the 
index (no boosts) change it, then put it back?  Do i need to make a new class 
and copy all the fields?  Should SOLR-20 be able to index a SolrDocument (no 
boosts) as well as a BoostedSolrDocument?  I think so...


Thanks for looking at this!  


> 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
>         Attachments: 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.

Reply via email to