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

Hoss Man commented on SOLR-515:
-------------------------------

1) it would be nice to make this use one of the existing PluginLoader APIs 
(MapPluginLoader/MapInitializedPlugin or 
NamedListPluginLoader/NamedListInitializedPlugin since we've been talking about 
trying to standardize on them ... i don't think we have any types of Plugin's 
at the moment that use SolrParams.

2) existing IndexSchema.init code will throuw ClassCast immediatly if someone 
attempts to use a class that isn't really a Similarity (because it attempts 
cast right away) ... reading your patch, i think this error will be defered 
until first use -- which might be a red herring for people, better to test it 
ASAP.

3) i was going to suggest skipping the factory and going with something like...

{code}
abstract class SolrSimilarity implements Similarity {
     abstract void init(NamedList);
}
{code}

...but then it occurred to me that with a factory pattern we can give custom 
Similarities the opportunity to precompute stats about the index before their 
use...

{code}
public abstract class SimilarityFactory {
  // init code here
  /** Get an uninformed Similarity instance */
  public abstract Similarity getSimilarity();
  /** Get a Similiarity instance for use by an IndexWriter updating a known 
IndexSchema */
  public Similarity getWriterSimilarity(IndexSchema schema) { return 
getSimilarity(); }
  /** Get a Similiarity instance for use by an SolrIndexSearcher */
  public Similarity getSearchSimilarity(SolrIndexSearcher searcher) { return 
getSimilarity(); }
}
{code}

...with IndexSchema.getSimilarity() being deprecated, but still functional by 
calling factory.getSimilarity()

An API like that, and a lot more interesting similarity implementations become 
possible.

> SimilarityFactory patch: facilitate parameterizable Similarity implementations
> ------------------------------------------------------------------------------
>
>                 Key: SOLR-515
>                 URL: https://issues.apache.org/jira/browse/SOLR-515
>             Project: Solr
>          Issue Type: New Feature
>          Components: search
>    Affects Versions: 1.3
>            Reporter: Erik Hatcher
>            Assignee: Erik Hatcher
>             Fix For: 1.3
>
>         Attachments: similarity_factory.patch, similarity_factory.patch, 
> similarity_factory.patch
>
>
> Solr currently allows a pluggable Lucene Similarity to be specified as:
>     <similarity class="org.apache.lucene.search.DefaultSimilarity"/> 
> This patch does not change this syntax at all, but detects whether a 
> Similarity or a SimilarityFactory is specified.  The new SimilarityFactory 
> class passes a NamedList from the config file into a getSimilarity(NamedList) 
> method.
> Yes, I used an interface, damn it!   Let the battles continue.   I've spoken 
> with my code on the issue.  But sure, I'll acquiesce on the topic and turn it 
> into an abstract class if I must - stupid programming languages!  
> object-oriented programming, not interface or abstract oriented programming 
> :)  All I ask is ya show me a good case where this interface won't suit your 
> needs, and I'll reply that instead of thinking the problem is the interface, 
> consider it is how the interface is used - it's implicitly designed to be 
> simply that, an interface.  You want a different way to configure, don't like 
> NamedLists for some reason maybe?, we change IndexSchema Similarity 
> construction smarts, perhaps creating another interface.  Same diff, sort of.
> I'm proud of the unit test, no XPath in sight.

-- 
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