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?


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?



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?


Thanks in advance for any help you can provide.

-- 

Mark Baird

Reply via email to