Hi,

I am looking at extending the source code for SolrIndexSearcher for my own
purposes.  Basically, I am trying to replace the use of Lucene's
IndexSearcher with a ParallelMultiSearcher version so that I can have a
query search both locally available indexes as well as remote indexes
available only via RMI.  This ParallelMultiSearcher is instantiated to
consist of both local and remote Searchable references.  The local
Searchables are simply IndexSearcher instances tied to local disk (separate
indexes), while the remote Searchables are made reachable via RMI.

In essence, where it used to be:

 IndexSearcher searcher = new IndexSearcher(reader);

it is now: (not the actual code but similar)

 Searchable[] searchables = new Searchable[3];
 for (int i=0; i<2; i++) {
   // Local searchable:
   searchables[i] = new IndexSearcher("/disk" + i + "/index");
 }

 // RMI searchable:  throws exception during search..
 searchables[2] = (Searchable) Naming.lookup
("//remote_host:1099/remote_svc");

 ParallelMultiSearcher searcher = new ParallelMultiSearcher(sch);

When I build the source and use it (the short story, by replacing the
relevant class file(s) within solr.war used by the example jetty
implementation), it starts up just fine.  If I comment out the RMI
searchable line, submission of a search query to Jetty/Solr works just fine,
and it is able to search any number of indexes.  However, with the RMI
searchable uncommented out, I get an exception thrown (here's the ending of
it):

May 9, 2006 1:38:07 AM org.apache.solr.core.SolrException log
SEVERE: java.rmi.MarshalException: error marshalling arguments; nested
exception is:
       java.io.NotSerializableException:
org.apache.lucene.search.MultiSearcher$1
       at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:122)
       at org.apache.lucene.search.RemoteSearchable_Stub.search(Unknown
Source)
       at org.apache.lucene.search.MultiSearcher.search(MultiSearcher.java
:248)
       at org.apache.lucene.search.Searcher.search(Searcher.java:116)
       at org.apache.lucene.search.Searcher.search(Searcher.java:95)
       at org.apache.solr.search.SolrIndexSearcher.getDocListNC(
SolrIndexSearcher.java:794)
       at org.apache.solr.search.SolrIndexSearcher.getDocListC(
SolrIndexSearcher.java:712)
       at org.apache.solr.search.SolrIndexSearcher.getDocList(
SolrIndexSearcher.java:605)
       at org.apache.solr.request.StandardRequestHandler.handleRequest(
StandardRequestHandler.java:106)

So it looks like it requires Serialization somehow to get it to work.
Wondering if anyone has any ideas to get around this problem.

tia,
Koji

Reply via email to