lucene-solr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Chris Hostetter <hossman_luc...@fucit.org>
Subject Re: svn commit: r520088 - in /lucene/solr/trunk: ./ src/java/org/apache/solr/update/ src/test/org/apache/solr/ src/test/org/apache/solr/update/
Date Tue, 20 Mar 2007 00:16:47 GMT

Thanks for comitting Mike, sorry i never got around to reviewing the patch.

Just out of curiousity though, can anyone explain why ConvertedLegacyTest
was functioning properly before this change?

I'm just wondering if we're breaking a case people might have been relying
on because it functioned (even if it wasn't intended to).



: Date: Mon, 19 Mar 2007 20:25:20 -0000
: From: klaas@apache.org
: Reply-To: solr-dev@lucene.apache.org
: To: solr-commits@lucene.apache.org
: Subject: svn commit: r520088 - in /lucene/solr/trunk: ./
:     src/java/org/apache/solr/update/ src/test/org/apache/solr/
:     src/test/org/apache/solr/update/
:
: Author: klaas
: Date: Mon Mar 19 13:25:19 2007
: New Revision: 520088
:
: URL: http://svn.apache.org/viewvc?view=rev&rev=520088
: Log:
: commit SOLR-172
:
: Added:
:     lucene/solr/trunk/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java
: Modified:
:     lucene/solr/trunk/CHANGES.txt
:     lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler.java
:     lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler2.java
:     lucene/solr/trunk/src/java/org/apache/solr/update/UpdateHandler.java
:     lucene/solr/trunk/src/test/org/apache/solr/ConvertedLegacyTest.java
:
: Modified: lucene/solr/trunk/CHANGES.txt
: URL: http://svn.apache.org/viewvc/lucene/solr/trunk/CHANGES.txt?view=diff&rev=520088&r1=520087&r2=520088
: ==============================================================================
: --- lucene/solr/trunk/CHANGES.txt (original)
: +++ lucene/solr/trunk/CHANGES.txt Mon Mar 19 13:25:19 2007
: @@ -147,6 +147,10 @@
:   5. Query are re-written before highlighting is performed.  This enables
:      proper highlighting of prefix and wildcard queries (klaas).
:
: + 6. A meaningful exception is raised when attempting to add a doc missing
: +    a unique id if it is declared in the schema and allowDups=false.
: +    (ryan via klaas)
: +
:  Optimizations
:   1. SOLR-114: HashDocSet specific implementations of union() and andNot()
:      for a 20x performance improvement for those set operations, and a new
:
: Modified: lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler.java
: URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler.java?view=diff&rev=520088&r1=520087&r2=520088
: ==============================================================================
: --- lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler.java (original)
: +++ lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler.java Mon Mar 19
13:25:19 2007
: @@ -310,6 +310,14 @@
:
:
:    public int addDoc(AddUpdateCommand cmd) throws IOException {
: +
: +    // if there is no ID field, use allowDups
: +    if( idField == null ) {
: +      cmd.allowDups = true;
: +      cmd.overwriteCommitted = false;
: +      cmd.overwritePending = false;
: +    }
: +
:      if (!cmd.allowDups && !cmd.overwritePending && !cmd.overwriteCommitted)
{
:        return addNoOverwriteNoDups(cmd);
:      } else if (!cmd.allowDups && !cmd.overwritePending && cmd.overwriteCommitted)
{
:
: Modified: lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler2.java
: URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler2.java?view=diff&rev=520088&r1=520087&r2=520088
: ==============================================================================
: --- lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler2.java (original)
: +++ lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler2.java Mon Mar
19 13:25:19 2007
: @@ -214,6 +214,13 @@
:      addCommands.incrementAndGet();
:      addCommandsCumulative.incrementAndGet();
:      int rc=-1;
: +
: +    // if there is no ID field, use allowDups
: +    if( idField == null ) {
: +      cmd.allowDups = true;
: +      cmd.overwriteCommitted = false;
: +      cmd.overwritePending = false;
: +    }
:
:      iwAccess.lock();
:      try {
:
: Modified: lucene/solr/trunk/src/java/org/apache/solr/update/UpdateHandler.java
: URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/update/UpdateHandler.java?view=diff&rev=520088&r1=520087&r2=520088
: ==============================================================================
: --- lucene/solr/trunk/src/java/org/apache/solr/update/UpdateHandler.java (original)
: +++ lucene/solr/trunk/src/java/org/apache/solr/update/UpdateHandler.java Mon Mar 19 13:25:19
2007
: @@ -21,6 +21,7 @@
:  import org.apache.lucene.index.Term;
:  import org.apache.lucene.document.Document;
:  import org.apache.lucene.document.Field;
: +import org.apache.lucene.document.Fieldable;
:  import org.apache.lucene.search.HitCollector;
:  import org.w3c.dom.NodeList;
:  import org.w3c.dom.Node;
: @@ -127,13 +128,18 @@
:    }
:
:    protected final String getIndexedId(Document doc) {
: -    if (idField == null) throw new SolrException(400,"Operation requires schema to have
a unique key field");
: +    if (idField == null)
: +      throw new SolrException(400,"Operation requires schema to have a unique key field");
: +
:      // Right now, single valued fields that require value transformation from external
to internal (indexed)
:      // form have that transformation already performed and stored as the field value.
: -    // This means
: -    String id = idFieldType.storedToIndexed(doc.getField(idField.getName()));
: -    if (id == null) throw new SolrException(400,"Document is missing uniqueKey field "
+ idField.getName());
: -    return id;
: +    Fieldable[] id = doc.getFieldables( idField.getName() );
: +    if (id == null || id.length < 1)
: +      throw new SolrException(400,"Document is missing uniqueKey field " + idField.getName());
: +    if( id.length > 1 )
: +      throw new SolrException(400,"Document specifies multiple unique ids! " + idField.getName());
: +
: +    return idFieldType.storedToIndexed( id[0] );
:    }
:
:    protected final String getIndexedIdOptional(Document doc) {
:
: Modified: lucene/solr/trunk/src/test/org/apache/solr/ConvertedLegacyTest.java
: URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/ConvertedLegacyTest.java?view=diff&rev=520088&r1=520087&r2=520088
: ==============================================================================
: --- lucene/solr/trunk/src/test/org/apache/solr/ConvertedLegacyTest.java (original)
: +++ lucene/solr/trunk/src/test/org/apache/solr/ConvertedLegacyTest.java Mon Mar 19 13:25:19
2007
: @@ -732,47 +732,47 @@
:      // test sorting  with some docs missing the sort field
:
:      assertU("<delete><query>id_i:[1000 TO 1010]</query></delete>");
: -    assertU("<add allowDups=\"true\"><doc><field name=\"id_i\">1000</field><field
name=\"a_i\">1</field><field name=\"nullfirst\">Z</field></doc></add>");
: -    assertU("<add allowDups=\"true\"><doc><field name=\"id_i\">1001</field><field
name=\"a_i\">10</field><field name=\"nullfirst\">A</field></doc></add>");
: -    assertU("<add allowDups=\"true\"><doc><field name=\"id_i\">1002</field><field
name=\"a_i\">1</field><field name=\"b_i\">100</field></doc></add>");
: -    assertU("<add allowDups=\"true\"><doc><field name=\"id_i\">1003</field><field
name=\"a_i\">-1</field></doc></add>");
: -    assertU("<add allowDups=\"true\"><doc><field name=\"id_i\">1004</field><field
name=\"a_i\">15</field></doc></add>");
: -    assertU("<add allowDups=\"true\"><doc><field name=\"id_i\">1005</field><field
name=\"a_i\">1</field><field name=\"b_i\">50</field></doc></add>");
: -    assertU("<add allowDups=\"true\"><doc><field name=\"id_i\">1006</field><field
name=\"a_i\">0</field></doc></add>");
: +    assertU("<add allowDups=\"true\"><doc><field name=\"id\">1000</field><field
name=\"a_i\">1</field><field name=\"nullfirst\">Z</field></doc></add>");
: +    assertU("<add allowDups=\"true\"><doc><field name=\"id\">1001</field><field
name=\"a_i\">10</field><field name=\"nullfirst\">A</field></doc></add>");
: +    assertU("<add allowDups=\"true\"><doc><field name=\"id\">1002</field><field
name=\"a_i\">1</field><field name=\"b_i\">100</field></doc></add>");
: +    assertU("<add allowDups=\"true\"><doc><field name=\"id\">1003</field><field
name=\"a_i\">-1</field></doc></add>");
: +    assertU("<add allowDups=\"true\"><doc><field name=\"id\">1004</field><field
name=\"a_i\">15</field></doc></add>");
: +    assertU("<add allowDups=\"true\"><doc><field name=\"id\">1005</field><field
name=\"a_i\">1</field><field name=\"b_i\">50</field></doc></add>");
: +    assertU("<add allowDups=\"true\"><doc><field name=\"id\">1006</field><field
name=\"a_i\">0</field></doc></add>");
:      assertU("<commit/>");
: -    assertQ(req("id_i:[1000 TO 1010]")
: +    assertQ(req("id:[1000 TO 1010]")
:              ,"*[count(//doc)=7]"
:              );
: -    assertQ(req("id_i:[1000 TO 1010]; b_i asc")
: +    assertQ(req("id:[1000 TO 1010]; b_i asc")
:              ,"*[count(//doc)=7] "
:              ,"//doc[1]/int[.='50'] "
:              ,"//doc[2]/int[.='100']"
:              );
: -    assertQ(req("id_i:[1000 TO 1010]; b_i desc")
: +    assertQ(req("id:[1000 TO 1010]; b_i desc")
:              ,"*[count(//doc)=7] "
:              ,"//doc[1]/int[.='100'] "
:              ,"//doc[2]/int[.='50']"
:              );
: -    assertQ(req("id_i:[1000 TO 1010]; a_i asc,b_i desc")
: +    assertQ(req("id:[1000 TO 1010]; a_i asc,b_i desc")
:              ,"*[count(//doc)=7] "
:              ,"//doc[3]/int[.='100'] "
:              ,"//doc[4]/int[.='50']  "
:              ,"//doc[5]/int[.='1000']"
:              );
: -    assertQ(req("id_i:[1000 TO 1010]; a_i asc,b_i asc")
: +    assertQ(req("id:[1000 TO 1010]; a_i asc,b_i asc")
:              ,"*[count(//doc)=7] "
:              ,"//doc[3]/int[.='50'] "
:              ,"//doc[4]/int[.='100']  "
:              ,"//doc[5]/int[.='1000']"
:              );
:      // nullfirst tests
: -    assertQ(req("id_i:[1000 TO 1002]; nullfirst asc")
: +    assertQ(req("id:[1000 TO 1002]; nullfirst asc")
:              ,"*[count(//doc)=3] "
:              ,"//doc[1]/int[.='1002']"
:              ,"//doc[2]/int[.='1001']  "
:              ,"//doc[3]/int[.='1000']"
:              );
: -    assertQ(req("id_i:[1000 TO 1002]; nullfirst desc")
: +    assertQ(req("id:[1000 TO 1002]; nullfirst desc")
:              ,"*[count(//doc)=3] "
:              ,"//doc[1]/int[.='1002']"
:              ,"//doc[2]/int[.='1000']  "
: @@ -781,16 +781,16 @@
:
:      // Sort parsing exception tests.  (SOLR-6, SOLR-99)
:      assertQEx( "can not sort unindexed fields",
: -        req( "id_i:1000; shouldbeunindexed asc" ), 400 );
: +        req( "id:1000; shouldbeunindexed asc" ), 400 );
:
:      assertQEx( "invalid query format",
: -        req( "id_i:1000; nullfirst" ), 400 );
: +        req( "id:1000; nullfirst" ), 400 );
:
:      assertQEx( "unknown sort field",
: -        req( "id_i:1000; abcde12345 asc" ), 1 );
: +        req( "id:1000; abcde12345 asc" ), 1 );
:
:      assertQEx( "unknown sort order",
: -        req( "id_i:1000; nullfirst aaa" ), 400 );
: +        req( "id:1000; nullfirst aaa" ), 400 );
:
:      // test prefix query
:
:
: Added: lucene/solr/trunk/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java
: URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java?view=auto&rev=520088
: ==============================================================================
: --- lucene/solr/trunk/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java (added)
: +++ lucene/solr/trunk/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java Mon Mar
19 13:25:19 2007
: @@ -0,0 +1,91 @@
: +/**
: + * 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.
: + */
: +
: +package org.apache.solr.update;
: +
: +import java.io.ByteArrayInputStream;
: +import java.io.IOException;
: +import java.io.InputStream;
: +import java.util.ArrayList;
: +import java.util.Collection;
: +import java.util.HashMap;
: +
: +import org.apache.lucene.document.Document;
: +import org.apache.lucene.document.Field;
: +import org.apache.lucene.document.Field.Index;
: +import org.apache.lucene.document.Field.Store;
: +import org.apache.solr.core.SolrCore;
: +import org.apache.solr.core.SolrException;
: +import org.apache.solr.handler.XmlUpdateRequestHandler;
: +import org.apache.solr.request.ContentStream;
: +import org.apache.solr.request.MapSolrParams;
: +import org.apache.solr.request.SolrQueryRequestBase;
: +import org.apache.solr.request.SolrQueryResponse;
: +import org.apache.solr.util.AbstractSolrTestCase;
: +
: +/**
: + *
: + * @author ryan
: + *
: + */
: +public class DirectUpdateHandlerTest extends AbstractSolrTestCase {
: +
: +  public String getSchemaFile() { return "schema.xml"; }
: +  public String getSolrConfigFile() { return "solrconfig.xml"; }
: +
: +
: +  public void testRequireUniqueKey() throws Exception
: +  {
: +    SolrCore core = SolrCore.getSolrCore();
: +
: +    UpdateHandler updater = core.getUpdateHandler();
: +
: +    AddUpdateCommand cmd = new AddUpdateCommand();
: +    cmd.overwriteCommitted = true;
: +    cmd.overwritePending = true;
: +    cmd.allowDups = false;
: +
: +    // Add a valid document
: +    cmd.doc = new Document();
: +    cmd.doc.add( new Field( "id", "AAA", Store.YES, Index.UN_TOKENIZED ) );
: +    cmd.doc.add( new Field( "subject", "xxxxx", Store.YES, Index.UN_TOKENIZED ) );
: +    updater.addDoc( cmd );
: +
: +    // Add a document with multiple ids
: +    cmd.indexedId = null;  // reset the id for this add
: +    cmd.doc = new Document();
: +    cmd.doc.add( new Field( "id", "AAA", Store.YES, Index.UN_TOKENIZED ) );
: +    cmd.doc.add( new Field( "id", "BBB", Store.YES, Index.UN_TOKENIZED ) );
: +    cmd.doc.add( new Field( "subject", "xxxxx", Store.YES, Index.UN_TOKENIZED ) );
: +    try {
: +      updater.addDoc( cmd );
: +      fail( "added a document with multiple ids" );
: +    }
: +    catch( SolrException ex ) { } // expected
: +
: +    // Add a document without an id
: +    cmd.indexedId = null;  // reset the id for this add
: +    cmd.doc = new Document();
: +    cmd.doc.add( new Field( "subject", "xxxxx", Store.YES, Index.UN_TOKENIZED ) );
: +    try {
: +      updater.addDoc( cmd );
: +      fail( "added a document without an ids" );
: +    }
: +    catch( SolrException ex ) { } // expected
: +  }
: +
: +}
:
:



-Hoss


Mime
View raw message