On Sep 19, 2008, at 11:49 AM, Mark Baird wrote:

I was finally given the go-ahead to upgrade from Solr 1.2 to 1.3 in our environment here at work now that 1.3 is final. However I'm running into a
couple problems that I'm having trouble finding solutions to.

First, I've added a class to our Solr distribution that extends
StandardRequestHandler. In particular it overrides getFacetInfo and uses
this to compute some aggregate values.  Here's my code:

protected NamedList getFacetInfo(SolrQueryRequest req, SolrQueryResponse
rsp, DocSet mainSet)
   {
       // Call the super class to get it's response first
       NamedList res = super.getFacetInfo(req, rsp, mainSet);

       // Now calculate all sums
       NamedList aggregates = new NamedList();
       try
       {
           aggregates.addAll(this.computeSums(req, mainSet));
           aggregates.addAll(this.computeAverages(req, mainSet));
       }
       catch (IOException e)
       {
           e.printStackTrace();
SolrException.logOnce(SolrCore.log, "Exception during aggregate
value calculations", e);
           return res;
       }

       // add the aggregate fields to the response
       res.add("facet_aggregates", aggregates);
       return res;
   }

However now StandardRequestHandler doesn't seem to implement the
getFacetInfo() method anymore.  Did this method move to another class
somewhere?  Or do I need to just do this aggregate stuff in a totally
different way in 1.3?


Not sure about aggregating, but the faceting is now handled in FacetComponent, thus, you probably need to override that with your own version.




Second, I've got some code running in the same JVM as Solr that does some stuff like getting the latest timestamp in the index to determine if we need to pull an update from our product info database, kicking off an optimize every night at 2:00AM, stuff like that. However I take it that this line
won't work anymore due to the multicore stuff:
   SolrCore core = SolrCore.getSolrCore();
That's fine, but how do I get a handle to the SolrCore intance(s) now? The SolrCore.getSolrCore method was static, the method in CoreContainer that replaces it is not static, so how, by just being in the same JVM, can a
class get access to the CoreContainer?

It's available in the SolrDispatchFilter, so it might be reasonable to extend that.





The only other thing I'm seeing is some deprecation messages using the
FieldType.getValueSource(SchemaField field) method. The source looks like
this:

 /** called to get the default value source (normally, from the
  *  Lucene FieldCache.)
  */
public ValueSource getValueSource(SchemaField field, QParser parser) {
   return getValueSource(field);
 }


 /**
  * @deprecated use [EMAIL PROTECTED] #getValueSource(SchemaField, QParser)}
  */
 @Deprecated
 public ValueSource getValueSource(SchemaField field) {
   return new OrdFieldSource(field.name);
 }

Which I find a little funny. Don't use this deprecated method, use this other method instead, which immediately throws away the extra parameter and
just calls the deprecated method anyway?

Hmmm, that does smell. It's been that way for a while, too. I'll see if I can dig up why that came about.

Reply via email to