You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by cu...@apache.org on 2002/07/17 23:54:38 UTC

cvs commit: jakarta-lucene/src/test/org/apache/lucene/search TestRemoteSearchable.java

cutting     2002/07/17 14:54:38

  Modified:    .        build.xml
               src/java/org/apache/lucene/document Document.java Field.java
               src/java/org/apache/lucene/search Filter.java ScoreDoc.java
                        Searchable.java TopDocs.java
  Added:       src/java/org/apache/lucene/search RemoteSearchableImpl.java
               src/test/org/apache/lucene/search TestRemoteSearchable.java
  Log:
  Added support for remote searching via RMI.
  
  Revision  Changes    Path
  1.28      +5 -0      jakarta-lucene/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-lucene/build.xml,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- build.xml	17 Jun 2002 15:34:41 -0000	1.27
  +++ build.xml	17 Jul 2002 21:54:38 -0000	1.28
  @@ -111,6 +111,11 @@
         debug="${debug}">
         <classpath refid="classpath"/>
       </javac>
  +
  +    <rmic classname="org.apache.lucene.search.RemoteSearchableImpl"
  +          base="${build.classes}">
  +      <classpath refid="classpath"/>
  +    </rmic>
     </target>
   
     <!-- ================================================================== -->
  
  
  
  1.2       +2 -2      jakarta-lucene/src/java/org/apache/lucene/document/Document.java
  
  Index: Document.java
  ===================================================================
  RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/document/Document.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Document.java	18 Sep 2001 16:29:52 -0000	1.1
  +++ Document.java	17 Jul 2002 21:54:38 -0000	1.2
  @@ -64,7 +64,7 @@
    * stored fields which uniquely identify it.
    * */
   
  -public final class Document {
  +public final class Document implements java.io.Serializable {
     DocumentFieldList fieldList = null;
   
     /** Constructs a new document with no fields. */
  @@ -118,7 +118,7 @@
   
   }
   
  -final class DocumentFieldList {
  +final class DocumentFieldList implements java.io.Serializable {
     DocumentFieldList(Field f, DocumentFieldList n) {
       field = f;
       next = n;
  
  
  
  1.6       +1 -1      jakarta-lucene/src/java/org/apache/lucene/document/Field.java
  
  Index: Field.java
  ===================================================================
  RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/document/Field.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Field.java	17 Jul 2002 17:38:04 -0000	1.5
  +++ Field.java	17 Jul 2002 21:54:38 -0000	1.6
  @@ -65,7 +65,7 @@
     index, so that they may be returned with hits on the document.
     */
   
  -public final class Field {
  +public final class Field implements java.io.Serializable {
     private String name = "body";
     private String stringValue = null;
     private Reader readerValue = null;
  
  
  
  1.2       +1 -1      jakarta-lucene/src/java/org/apache/lucene/search/Filter.java
  
  Index: Filter.java
  ===================================================================
  RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/Filter.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Filter.java	18 Sep 2001 16:29:56 -0000	1.1
  +++ Filter.java	17 Jul 2002 21:54:38 -0000	1.2
  @@ -60,7 +60,7 @@
   
   /** Abstract base class providing a mechanism to restrict searches to a subset
    of an index. */
  -abstract public class Filter {
  +abstract public class Filter implements java.io.Serializable {
     /** Returns a BitSet with true for documents which should be permitted in
       search results, and false for those that should not. */
     abstract public BitSet bits(IndexReader reader) throws IOException;
  
  
  
  1.3       +1 -1      jakarta-lucene/src/java/org/apache/lucene/search/ScoreDoc.java
  
  Index: ScoreDoc.java
  ===================================================================
  RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/ScoreDoc.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ScoreDoc.java	17 Jul 2002 17:38:04 -0000	1.2
  +++ ScoreDoc.java	17 Jul 2002 21:54:38 -0000	1.3
  @@ -56,7 +56,7 @@
   
   /** Expert: Returned by low-level search implementations.
    * @see TopDocs */
  -public class ScoreDoc {
  +public class ScoreDoc implements java.io.Serializable {
     /** Expert: The score of this document for the query. */
     public float score;
   
  
  
  
  1.2       +7 -8      jakarta-lucene/src/java/org/apache/lucene/search/Searchable.java
  
  Index: Searchable.java
  ===================================================================
  RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/Searchable.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Searchable.java	17 Jul 2002 17:38:04 -0000	1.1
  +++ Searchable.java	17 Jul 2002 21:54:38 -0000	1.2
  @@ -60,7 +60,7 @@
   import org.apache.lucene.index.IndexReader;
   
   /** The interface for search implementations. */
  -public interface Searchable {
  +public interface Searchable extends java.rmi.Remote {
     /** Lower-level search API.
      *
      * <p>{@link HitCollector#collect(int,float)} is called for every non-zero
  @@ -75,23 +75,23 @@
      * @param filter if non-null, a bitset used to eliminate some documents
      * @param results to receive hits
      */
  -  public abstract void search(Query query, Filter filter, HitCollector results)
  +  void search(Query query, Filter filter, HitCollector results)
       throws IOException;
   
     /** Frees resources associated with this Searcher. */
  -  public abstract void close() throws IOException;
  +  void close() throws IOException;
   
     /** Expert: Returns the number of documents containing <code>term</code>.
      * Called by search code to compute term weights.
      * @see IndexReader#docFreq(Term).
      */
  -  public abstract int docFreq(Term term) throws IOException;
  +  int docFreq(Term term) throws IOException;
   
     /** Expert: Returns one greater than the largest possible document number.
      * Called by search code to compute term weights.
      * @see IndexReader#maxDoc().
      */
  -  public abstract int maxDoc() throws IOException;
  +  int maxDoc() throws IOException;
   
     /** Expert: Low-level search implementation.  Finds the top <code>n</code>
      * hits for <code>query</code>, applying <code>filter</code> if non-null.
  @@ -101,12 +101,11 @@
      * <p>Applications should usually call {@link Searcher#search(Query)} or
      * {@link Searcher#search(Query,Filter)} instead.
      */
  -  public abstract TopDocs search(Query query, Filter filter, int n)
  -    throws IOException;
  +  TopDocs search(Query query, Filter filter, int n) throws IOException;
   
     /** Expert: Returns the stored fields of document <code>i</code>.
      * Called by {@link HitCollector} implementations.
      * @see IndexReader#document(int).
      */
  -  public abstract Document doc(int i) throws IOException;
  +  Document doc(int i) throws IOException;
   }
  
  
  
  1.3       +1 -1      jakarta-lucene/src/java/org/apache/lucene/search/TopDocs.java
  
  Index: TopDocs.java
  ===================================================================
  RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/TopDocs.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TopDocs.java	17 Jul 2002 17:38:04 -0000	1.2
  +++ TopDocs.java	17 Jul 2002 21:54:38 -0000	1.3
  @@ -56,7 +56,7 @@
   
   /** Expert: Returned by low-level search implementations.
    * @see Searcher#search(Query,Filter,int) */
  -public class TopDocs {
  +public class TopDocs implements java.io.Serializable {
     /** Expert: The total number of hits for the query.
      * @see Hits#length()
     */
  
  
  
  1.1                  jakarta-lucene/src/java/org/apache/lucene/search/RemoteSearchableImpl.java
  
  Index: RemoteSearchableImpl.java
  ===================================================================
  package org.apache.lucene.search;
  
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Lucene" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Lucene", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  import java.io.IOException;
  import org.apache.lucene.document.Document;
  import org.apache.lucene.index.Term;
  import org.apache.lucene.index.IndexReader;
  
  import java.rmi.Naming;
  import java.rmi.RemoteException;
  import java.rmi.RMISecurityManager;
  import java.rmi.server.UnicastRemoteObject;
  
  /** A remote searchable implementation. */
  public class RemoteSearchableImpl
    extends UnicastRemoteObject
    implements Searchable {
    
    private Searchable local;
    
    /** Constructs and exports a remote searcher. */
    public RemoteSearchableImpl(Searchable local) throws RemoteException {
      super();
      this.local = local;
    }
    
    public void search(Query query, Filter filter, HitCollector results)
      throws IOException {
      local.search(query, filter, results);
    }
    
    public void close() throws IOException {
      local.close();
    }
  
    public int docFreq(Term term) throws IOException {
      return local.docFreq(term);
    }
  
    public int maxDoc() throws IOException {
      return local.maxDoc();
    }
  
    public TopDocs search(Query query, Filter filter, int n) throws IOException {
      return local.search(query, filter, n);
    }
  
    public Document doc(int i) throws IOException {
      return local.doc(i);
    }
  
    /** Exports a searcher for the index in args[0] named
     * "//localhost/Searchable". */
    public static void main(String args[]) throws Exception {
      // create and install a security manager
      if (System.getSecurityManager() == null) {
        System.setSecurityManager(new RMISecurityManager());
      }
      
      Searchable local = new IndexSearcher(args[0]);
      RemoteSearchableImpl impl = new RemoteSearchableImpl(local);
        
      // bind the implementation to "Searchable"
      Naming.rebind("//localhost/Searchable", impl);
    }
  
  }
  
  
  
  1.1                  jakarta-lucene/src/test/org/apache/lucene/search/TestRemoteSearchable.java
  
  Index: TestRemoteSearchable.java
  ===================================================================
  package org.apache.lucene.search;
  
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Lucene" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Lucene", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  import java.rmi.Naming;
  import java.rmi.RemoteException;
  import java.rmi.registry.LocateRegistry;
  
  import junit.framework.TestCase;
  
  import org.apache.lucene.search.IndexSearcher;
  import org.apache.lucene.search.MultiSearcher;
  import org.apache.lucene.index.Term;
  import org.apache.lucene.index.IndexWriter;
  import org.apache.lucene.store.RAMDirectory;
  import org.apache.lucene.analysis.SimpleAnalyzer;
  import org.apache.lucene.document.Document;
  import org.apache.lucene.document.Field;
  
  public class TestRemoteSearchable extends TestCase {
    public TestRemoteSearchable(String name) {
      super(name);
    }
  
    public static void startServer() throws Exception {
      // construct an index
      RAMDirectory indexStore = new RAMDirectory();
      IndexWriter writer = new IndexWriter(indexStore,new SimpleAnalyzer(),true);
      Document doc = new Document();
      doc.add(Field.Text("test", "test"));
      writer.addDocument(doc);
      writer.optimize();
      writer.close();
  
      // publish it
      LocateRegistry.createRegistry(1099);
      Searchable local = new IndexSearcher(indexStore);
      RemoteSearchableImpl impl = new RemoteSearchableImpl(local);
      Naming.rebind("//localhost/Searchable", impl);
    }
  
    public static void search() throws Exception {
      // try to search the published index
      Searchable remote = (Searchable)Naming.lookup("//localhost/Searchable");
      Searchable[] searchables = {remote};
      Searcher searcher = new MultiSearcher(searchables);
      Query query = new TermQuery(new Term("test", "test"));
      Hits result = searcher.search(query);
  
      assertEquals(1, result.length());
      assertEquals("test", result.doc(0).get("test"));
    }
    
    public void testRemoteSearch() throws Exception { 
      startServer();
      search();
    }
  
    public static void main(String[] args) throws Exception {
      startServer();
      search();
      System.exit(0);
    }
  }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>