You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by gs...@apache.org on 2009/09/10 15:07:20 UTC

svn commit: r813416 - in /lucene/solr/trunk/src: solrj/org/apache/solr/client/solrj/request/ test/org/apache/solr/client/solrj/ test/test-files/

Author: gsingers
Date: Thu Sep 10 13:07:19 2009
New Revision: 813416

URL: http://svn.apache.org/viewvc?rev=813416&view=rev
Log:
SOLR-1411: Add support for uploading ContentStreams via SolrJ

Added:
    lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/AbstractUpdateRequest.java   (with props)
    lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/ContentStreamUpdateRequest.java   (with props)
    lucene/solr/trunk/src/test/test-files/books.csv
      - copied unchanged from r813405, lucene/solr/trunk/example/exampledocs/books.csv
    lucene/solr/trunk/src/test/test-files/mailing_lists.pdf
      - copied unchanged from r813405, lucene/solr/trunk/site/mailing_lists.pdf
Modified:
    lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/UpdateRequest.java
    lucene/solr/trunk/src/test/org/apache/solr/client/solrj/SolrExampleTests.java

Added: lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/AbstractUpdateRequest.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/AbstractUpdateRequest.java?rev=813416&view=auto
==============================================================================
--- lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/AbstractUpdateRequest.java (added)
+++ lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/AbstractUpdateRequest.java Thu Sep 10 13:07:19 2009
@@ -0,0 +1,126 @@
+package org.apache.solr.client.solrj.request;
+
+import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.SolrServer;
+import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.response.UpdateResponse;
+import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.params.UpdateParams;
+
+import java.io.IOException;
+
+
+/**
+ *
+ *
+ **/
+public abstract class AbstractUpdateRequest extends SolrRequest {
+  protected ModifiableSolrParams params;
+  protected int commitWithin = -1;
+
+  public enum ACTION {
+    COMMIT,
+    OPTIMIZE
+  }
+
+  public AbstractUpdateRequest(METHOD m, String path) {
+    super(m, path);
+  }
+
+  /** Sets appropriate parameters for the given ACTION */
+  public AbstractUpdateRequest setAction(ACTION action, boolean waitFlush, boolean waitSearcher ) {
+    return setAction(action, waitFlush, waitSearcher, 1);
+  }
+
+  public AbstractUpdateRequest setAction(ACTION action, boolean waitFlush, boolean waitSearcher, int maxSegments ) {
+    if (params == null)
+      params = new ModifiableSolrParams();
+
+    if( action == ACTION.OPTIMIZE ) {
+      params.set( UpdateParams.OPTIMIZE, "true" );
+      params.set(UpdateParams.MAX_OPTIMIZE_SEGMENTS, maxSegments);
+    }
+    else if( action == ACTION.COMMIT ) {
+      params.set( UpdateParams.COMMIT, "true" );
+    }
+    params.set( UpdateParams.WAIT_FLUSH, String.valueOf(waitFlush));
+    params.set( UpdateParams.WAIT_SEARCHER, String.valueOf(waitSearcher));
+    return this;
+  }
+
+  public AbstractUpdateRequest setAction(ACTION action, boolean waitFlush, boolean waitSearcher, int maxSegments , boolean expungeDeletes) {
+    setAction(action, waitFlush, waitSearcher,maxSegments) ;
+    params.set(UpdateParams.EXPUNGE_DELETES, String.valueOf(expungeDeletes));
+    return this;
+  }
+
+  /**
+   * @since Solr 1.4
+   */
+  public AbstractUpdateRequest rollback() {
+    if (params == null)
+      params = new ModifiableSolrParams();
+
+    params.set( UpdateParams.ROLLBACK, "true" );
+    return this;
+  }
+
+  public void setParam(String param, String value) {
+    if (params == null)
+      params = new ModifiableSolrParams();
+    params.set(param, value);
+  }
+
+  /** Sets the parameters for this update request, overwriting any previous */
+  public void setParams(ModifiableSolrParams params) {
+    this.params = params;
+  }
+
+  @Override
+  public ModifiableSolrParams getParams() {
+    return params;
+  }
+
+  @Override
+  public UpdateResponse process( SolrServer server ) throws SolrServerException, IOException
+  {
+    long startTime = System.currentTimeMillis();
+    UpdateResponse res = new UpdateResponse();
+    res.setResponse( server.request( this ) );
+    res.setElapsedTime( System.currentTimeMillis()-startTime );
+    return res;
+  }
+
+  public boolean isWaitFlush() {
+    return params != null && params.getBool(UpdateParams.WAIT_FLUSH, false);
+  }
+
+  public boolean isWaitSearcher() {
+    return params != null && params.getBool(UpdateParams.WAIT_SEARCHER, false);
+  }
+
+  public ACTION getAction() {
+    if (params==null) return null;
+    if (params.getBool(UpdateParams.COMMIT, false)) return ACTION.COMMIT;
+    if (params.getBool(UpdateParams.OPTIMIZE, false)) return ACTION.OPTIMIZE;
+    return null;
+  }
+
+  public void setWaitFlush(boolean waitFlush) {
+    setParam( UpdateParams.WAIT_FLUSH, waitFlush+"" );
+  }
+
+  public void setWaitSearcher(boolean waitSearcher) {
+    setParam( UpdateParams.WAIT_SEARCHER, waitSearcher+"" );
+  }
+
+  public int getCommitWithin() {
+    return commitWithin;
+  }
+
+  public void setCommitWithin(int commitWithin) {
+    this.commitWithin = commitWithin;
+  }
+
+
+}

Propchange: lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/AbstractUpdateRequest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/ContentStreamUpdateRequest.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/ContentStreamUpdateRequest.java?rev=813416&view=auto
==============================================================================
--- lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/ContentStreamUpdateRequest.java (added)
+++ lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/ContentStreamUpdateRequest.java Thu Sep 10 13:07:19 2009
@@ -0,0 +1,79 @@
+package org.apache.solr.client.solrj.request;
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.SolrServer;
+import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.response.UpdateResponse;
+import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.ContentStream;
+import org.apache.solr.common.util.ContentStreamBase;
+
+import java.io.IOException;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+
+/**
+ * Basic functionality to upload a File to a Solr Cell
+ * <p/>
+ * See http://wiki.apache.org/solr/ExtractingRequestHandler
+ *
+ **/
+public class ContentStreamUpdateRequest extends AbstractUpdateRequest {
+  List<ContentStream> contentStreams;
+
+  /**
+   *
+   * @param url The URL for Solr Cell.
+   */
+  public ContentStreamUpdateRequest(String url) {
+    super(METHOD.POST, url);
+    contentStreams = new ArrayList<ContentStream>();
+  }
+
+  @Override
+  public Collection<ContentStream> getContentStreams() throws IOException {
+    return contentStreams;
+  }
+
+  /**
+   * Add a File to the {@link org.apache.solr.common.util.ContentStream}s.
+   * @param file The File to add.
+   * @throws IOException if there was an error with the file.
+   *
+   * @see #getContentStreams()
+   * @see org.apache.solr.common.util.ContentStreamBase.FileStream
+   */
+  public void addFile(File file) throws IOException {
+    addContentStream(new ContentStreamBase.FileStream(file));
+  }
+
+  /**
+   * Add a {@link org.apache.solr.common.util.ContentStream} to {@link #getContentStreams()}
+   * @param contentStream The {@link org.apache.solr.common.util.ContentStream}
+   */
+  public void addContentStream(ContentStream contentStream){
+    contentStreams.add(contentStream);
+  }
+  
+}

Propchange: lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/ContentStreamUpdateRequest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/UpdateRequest.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/UpdateRequest.java?rev=813416&r1=813415&r2=813416&view=diff
==============================================================================
--- lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/UpdateRequest.java (original)
+++ lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/UpdateRequest.java Thu Sep 10 13:07:19 2009
@@ -41,8 +41,12 @@
  * @version $Id$
  * @since solr 1.3
  */
-public class UpdateRequest extends SolrRequest
-{
+public class UpdateRequest extends AbstractUpdateRequest {
+  /**
+   * Kept for back compatibility.
+   *
+   * @deprecated Use {@link AbstractUpdateRequest.ACTION} instead
+   */
   public enum ACTION {
     COMMIT,
     OPTIMIZE
@@ -53,9 +57,6 @@
   private List<String> deleteById = null;
   private List<String> deleteQuery = null;
 
-  private ModifiableSolrParams params;
-  private int commitWithin = -1;
-  
   public UpdateRequest()
   {
     super( METHOD.POST, "/update" );
@@ -132,11 +133,18 @@
     return this;
   }
 
-  /** Sets appropriate parameters for the given ACTION */
+  /** Sets appropriate parameters for the given ACTION
+   *
+   * @deprecated Use {@link org.apache.solr.client.solrj.request.AbstractUpdateRequest.ACTION} instead
+   * */
   public UpdateRequest setAction(ACTION action, boolean waitFlush, boolean waitSearcher ) {
     return setAction(action, waitFlush, waitSearcher, 1);
   }
 
+  /**
+   *
+   * @deprecated Use {@link org.apache.solr.client.solrj.request.AbstractUpdateRequest.ACTION} instead
+   */
   public UpdateRequest setAction(ACTION action, boolean waitFlush, boolean waitSearcher, int maxSegments ) {
     if (params == null)
       params = new ModifiableSolrParams();
@@ -153,34 +161,17 @@
     return this;
   }
 
+  /**
+   *
+   *
+   * @deprecated Use {@link org.apache.solr.client.solrj.request.AbstractUpdateRequest.ACTION} instead
+   */
   public UpdateRequest setAction(ACTION action, boolean waitFlush, boolean waitSearcher, int maxSegments , boolean expungeDeletes) {
     setAction(action, waitFlush, waitSearcher,maxSegments) ;
     params.set(UpdateParams.EXPUNGE_DELETES,""+expungeDeletes);
     return this;
   }
 
-  /**
-   * @since Solr 1.4
-   */
-  public UpdateRequest rollback() {
-    if (params == null)
-      params = new ModifiableSolrParams();
-
-    params.set( UpdateParams.ROLLBACK, "true" );
-    return this;
-  }
-  
-
-  public void setParam(String param, String value) {
-    if (params == null)
-      params = new ModifiableSolrParams();
-    params.set(param, value);
-  }
-
-  /** Sets the parameters for this update request, overwriting any previous */
-  public void setParams(ModifiableSolrParams params) {
-    this.params = params;
-  }
 
   public void setDocIterator(Iterator<SolrInputDocument> docIterator) {
     this.docIterator = docIterator;
@@ -261,21 +252,6 @@
   //--------------------------------------------------------------------------
   //--------------------------------------------------------------------------
 
-  @Override
-  public ModifiableSolrParams getParams() {
-    return params;
-  }
-  
-  @Override
-  public UpdateResponse process( SolrServer server ) throws SolrServerException, IOException
-  {
-    long startTime = System.currentTimeMillis();
-    UpdateResponse res = new UpdateResponse();
-    res.setResponse( server.request( this ) );
-    res.setElapsedTime( System.currentTimeMillis()-startTime );
-    return res;
-  }
-  
   //--------------------------------------------------------------------------
   // 
   //--------------------------------------------------------------------------
@@ -296,34 +272,4 @@
     return deleteQuery;
   }
 
-  public boolean isWaitFlush() {
-    return params != null && params.getBool(UpdateParams.WAIT_FLUSH, false);
-  }
-
-  public boolean isWaitSearcher() {
-    return params != null && params.getBool(UpdateParams.WAIT_SEARCHER, false);
-  }
-
-  public ACTION getAction() {
-    if (params==null) return null;
-    if (params.getBool(UpdateParams.COMMIT, false)) return ACTION.COMMIT; 
-    if (params.getBool(UpdateParams.OPTIMIZE, false)) return ACTION.OPTIMIZE;
-    return null;
-  }
-
-  public void setWaitFlush(boolean waitFlush) {
-    setParam( UpdateParams.WAIT_FLUSH, waitFlush+"" );
-  }
-
-  public void setWaitSearcher(boolean waitSearcher) {
-    setParam( UpdateParams.WAIT_SEARCHER, waitSearcher+"" );
-  }
-
-  public int getCommitWithin() {
-    return commitWithin;
-  }
-
-  public void setCommitWithin(int commitWithin) {
-    this.commitWithin = commitWithin;
-  }
 }

Modified: lucene/solr/trunk/src/test/org/apache/solr/client/solrj/SolrExampleTests.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/client/solrj/SolrExampleTests.java?rev=813416&r1=813415&r2=813416&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/client/solrj/SolrExampleTests.java (original)
+++ lucene/solr/trunk/src/test/org/apache/solr/client/solrj/SolrExampleTests.java Thu Sep 10 13:07:19 2009
@@ -20,6 +20,7 @@
 
 import java.io.IOException;
 import java.io.StringWriter;
+import java.io.File;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -31,6 +32,8 @@
 import org.apache.solr.client.solrj.request.SolrPing;
 import org.apache.solr.client.solrj.response.FieldStatsInfo;
 import org.apache.solr.client.solrj.request.UpdateRequest;
+import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest;
+import org.apache.solr.client.solrj.request.AbstractUpdateRequest;
 import org.apache.solr.client.solrj.response.LukeResponse;
 import org.apache.solr.client.solrj.response.QueryResponse;
 import org.apache.solr.client.solrj.response.FacetField;
@@ -38,6 +41,7 @@
 import org.apache.solr.client.solrj.util.ClientUtils;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.util.XML;
+import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.params.FacetParams;
 
 /**
@@ -239,8 +243,41 @@
     
     Assert.assertEquals( 1, rsp.getResults().getNumFound() );
   }
-  
-  
+
+
+  public void testContentStreamRequest() throws Exception {
+    SolrServer server = getSolrServer();
+    server.deleteByQuery( "*:*" );// delete everything!
+    server.commit();
+    QueryResponse rsp = server.query( new SolrQuery( "*:*") );
+    Assert.assertEquals( 0, rsp.getResults().getNumFound() );
+
+    ContentStreamUpdateRequest up = new ContentStreamUpdateRequest("/update/csv");
+    up.addFile(new File("books.csv"));
+    up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);
+    NamedList<Object> result = server.request(up);
+    assertNotNull("Couldn't upload books.csv", result);
+    rsp = server.query( new SolrQuery( "*:*") );
+    Assert.assertEquals( 10, rsp.getResults().getNumFound() );
+
+    server.deleteByQuery( "*:*" );// delete everything!
+    server.commit();
+    rsp = server.query( new SolrQuery( "*:*") );
+    Assert.assertEquals( 0, rsp.getResults().getNumFound() );
+
+    up = new ContentStreamUpdateRequest("/update/extract");
+    up.addFile(new File("mailing_lists.pdf"));
+    up.setParam("literal.id", "mailing_lists.pdf");
+    up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);
+    result = server.request(up);
+    assertNotNull("Couldn't upload mailing_lists.pdf", result);
+    rsp = server.query( new SolrQuery( "*:*") );
+    Assert.assertEquals( 1, rsp.getResults().getNumFound() );
+
+
+  }
+
+
   protected void assertNumFound( String query, int num ) throws SolrServerException, IOException
   {
     QueryResponse rsp = getSolrServer().query( new SolrQuery( query ) );