From 315370dcbb305526c387123c7c7df670d1c7bfc9 Mon Sep 17 00:00:00 2001 From: Yonik Seeley Date: Sun, 26 Dec 2010 14:25:42 +0000 Subject: [PATCH] SOLR-1930: remove solr deprecations - fieldType.getValueSource migration git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1052889 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/solr/schema/BCDIntField.java | 4 +- .../org/apache/solr/schema/BoolField.java | 4 +- .../org/apache/solr/schema/ByteField.java | 4 +- .../org/apache/solr/schema/DoubleField.java | 4 +- .../org/apache/solr/schema/FieldType.java | 15 +- .../org/apache/solr/schema/FloatField.java | 4 +- .../java/org/apache/solr/schema/IntField.java | 4 +- .../org/apache/solr/schema/LongField.java | 4 +- .../apache/solr/schema/RandomSortField.java | 3 +- .../org/apache/solr/schema/ShortField.java | 4 +- .../solr/schema/SortableDoubleField.java | 4 +- .../solr/schema/SortableFloatField.java | 4 +- .../apache/solr/schema/SortableIntField.java | 4 +- .../apache/solr/schema/SortableLongField.java | 4 +- .../org/apache/solr/schema/TrieField.java | 3 +- .../org/apache/solr/schema/UUIDField.java | 2 +- .../solr/update/DirectUpdateHandler.java | 401 ------------------ 17 files changed, 45 insertions(+), 427 deletions(-) delete mode 100644 solr/src/java/org/apache/solr/update/DirectUpdateHandler.java diff --git a/solr/src/java/org/apache/solr/schema/BCDIntField.java b/solr/src/java/org/apache/solr/schema/BCDIntField.java index e825dbd2df4..6a2ef7a0ea9 100644 --- a/solr/src/java/org/apache/solr/schema/BCDIntField.java +++ b/solr/src/java/org/apache/solr/schema/BCDIntField.java @@ -18,6 +18,7 @@ package org.apache.solr.schema; import org.apache.lucene.search.SortField; +import org.apache.solr.search.QParser; import org.apache.solr.search.function.ValueSource; import org.apache.lucene.document.Fieldable; import org.apache.solr.util.BCDUtils; @@ -36,7 +37,8 @@ public class BCDIntField extends FieldType { return getStringSort(field,reverse); } - public ValueSource getValueSource(SchemaField field) { + @Override + public ValueSource getValueSource(SchemaField field, QParser qparser) { throw new UnsupportedOperationException("ValueSource not implemented"); } diff --git a/solr/src/java/org/apache/solr/schema/BoolField.java b/solr/src/java/org/apache/solr/schema/BoolField.java index 2e838e8e90f..907849a15ff 100644 --- a/solr/src/java/org/apache/solr/schema/BoolField.java +++ b/solr/src/java/org/apache/solr/schema/BoolField.java @@ -20,6 +20,7 @@ package org.apache.solr.schema; import org.apache.lucene.search.SortField; import org.apache.lucene.util.BytesRef; import org.apache.noggit.CharArr; +import org.apache.solr.search.QParser; import org.apache.solr.search.function.ValueSource; import org.apache.solr.search.function.OrdFieldSource; import org.apache.lucene.analysis.Analyzer; @@ -43,7 +44,8 @@ public class BoolField extends FieldType { return getStringSort(field,reverse); } - public ValueSource getValueSource(SchemaField field) { + @Override + public ValueSource getValueSource(SchemaField field, QParser qparser) { return new OrdFieldSource(field.name); } diff --git a/solr/src/java/org/apache/solr/schema/ByteField.java b/solr/src/java/org/apache/solr/schema/ByteField.java index 8f53ed2b66a..ce84ec3b966 100644 --- a/solr/src/java/org/apache/solr/schema/ByteField.java +++ b/solr/src/java/org/apache/solr/schema/ByteField.java @@ -22,6 +22,7 @@ import org.apache.lucene.search.cache.ByteValuesCreator; import org.apache.lucene.search.cache.CachedArrayCreator; import org.apache.solr.response.TextResponseWriter; +import org.apache.solr.search.QParser; import org.apache.solr.search.function.ValueSource; import org.apache.solr.search.function.ByteFieldSource; @@ -41,7 +42,8 @@ public class ByteField extends FieldType { return new SortField(field.name, SortField.BYTE, reverse); } - public ValueSource getValueSource(SchemaField field) { + @Override + public ValueSource getValueSource(SchemaField field, QParser qparser) { return new ByteFieldSource( new ByteValuesCreator( field.name, null, CachedArrayCreator.CACHE_VALUES_AND_BITS ) ); } diff --git a/solr/src/java/org/apache/solr/schema/DoubleField.java b/solr/src/java/org/apache/solr/schema/DoubleField.java index 2b2a8f42f68..79da6845ccd 100644 --- a/solr/src/java/org/apache/solr/schema/DoubleField.java +++ b/solr/src/java/org/apache/solr/schema/DoubleField.java @@ -22,6 +22,7 @@ import org.apache.lucene.search.SortField; import org.apache.lucene.search.cache.CachedArrayCreator; import org.apache.lucene.search.cache.DoubleValuesCreator; import org.apache.solr.response.TextResponseWriter; +import org.apache.solr.search.QParser; import org.apache.solr.search.function.DoubleFieldSource; import org.apache.solr.search.function.ValueSource; @@ -41,7 +42,8 @@ public class DoubleField extends FieldType { return new SortField(field.name, SortField.DOUBLE, reverse); } - public ValueSource getValueSource(SchemaField field) { + @Override + public ValueSource getValueSource(SchemaField field, QParser qparser) { // fieldCache doesn't support double return new DoubleFieldSource( new DoubleValuesCreator( field.name, null, CachedArrayCreator.CACHE_VALUES_AND_BITS ) ); } diff --git a/solr/src/java/org/apache/solr/schema/FieldType.java b/solr/src/java/org/apache/solr/schema/FieldType.java index 424e7e51ad6..237750096d0 100644 --- a/solr/src/java/org/apache/solr/schema/FieldType.java +++ b/solr/src/java/org/apache/solr/schema/FieldType.java @@ -490,19 +490,10 @@ public abstract class FieldType extends FieldProperties { * Lucene FieldCache.) */ public ValueSource getValueSource(SchemaField field, QParser parser) { - return getValueSource(field); - } - - - /** - * @deprecated use {@link #getValueSource(SchemaField, QParser)} - */ - @Deprecated - public ValueSource getValueSource(SchemaField field) { - // return new OrdFieldSource(field.name); return new StrFieldSource(field.name); } + /** * Returns a Query instance for doing range searches on this field type. {@link org.apache.solr.search.SolrQueryParser} * currently passes part1 and part2 as null if they are '*' respectively. minInclusive and maxInclusive are both true @@ -540,6 +531,8 @@ public abstract class FieldType extends FieldProperties { * */ public Query getFieldQuery(QParser parser, SchemaField field, String externalVal) { - return new TermQuery(new Term(field.getName(), toInternal(externalVal))); + BytesRef br = new BytesRef(); + readableToIndexed(externalVal, br); + return new TermQuery(new Term(field.getName(), br)); } } diff --git a/solr/src/java/org/apache/solr/schema/FloatField.java b/solr/src/java/org/apache/solr/schema/FloatField.java index c9fbeae7e8b..9cd2cad66b0 100644 --- a/solr/src/java/org/apache/solr/schema/FloatField.java +++ b/solr/src/java/org/apache/solr/schema/FloatField.java @@ -20,6 +20,7 @@ package org.apache.solr.schema; import org.apache.lucene.search.SortField; import org.apache.lucene.search.cache.CachedArrayCreator; import org.apache.lucene.search.cache.FloatValuesCreator; +import org.apache.solr.search.QParser; import org.apache.solr.search.function.ValueSource; import org.apache.solr.search.function.FloatFieldSource; import org.apache.lucene.document.Fieldable; @@ -39,7 +40,8 @@ public class FloatField extends FieldType { return new SortField(field.name,SortField.FLOAT, reverse); } - public ValueSource getValueSource(SchemaField field) { + @Override + public ValueSource getValueSource(SchemaField field, QParser qparser) { return new FloatFieldSource( new FloatValuesCreator( field.name, null, CachedArrayCreator.CACHE_VALUES_AND_BITS ) ); } diff --git a/solr/src/java/org/apache/solr/schema/IntField.java b/solr/src/java/org/apache/solr/schema/IntField.java index afb8d775d26..e8ccab2b667 100644 --- a/solr/src/java/org/apache/solr/schema/IntField.java +++ b/solr/src/java/org/apache/solr/schema/IntField.java @@ -20,6 +20,7 @@ package org.apache.solr.schema; import org.apache.lucene.search.SortField; import org.apache.lucene.search.cache.CachedArrayCreator; import org.apache.lucene.search.cache.IntValuesCreator; +import org.apache.solr.search.QParser; import org.apache.solr.search.function.ValueSource; import org.apache.solr.search.function.IntFieldSource; import org.apache.lucene.document.Fieldable; @@ -39,7 +40,8 @@ public class IntField extends FieldType { return new SortField(field.name,SortField.INT, reverse); } - public ValueSource getValueSource(SchemaField field) { + @Override + public ValueSource getValueSource(SchemaField field, QParser qparser) { return new IntFieldSource(new IntValuesCreator( field.name, null, CachedArrayCreator.CACHE_VALUES_AND_BITS ) ); } diff --git a/solr/src/java/org/apache/solr/schema/LongField.java b/solr/src/java/org/apache/solr/schema/LongField.java index 30115f2029f..c716552f5af 100644 --- a/solr/src/java/org/apache/solr/schema/LongField.java +++ b/solr/src/java/org/apache/solr/schema/LongField.java @@ -22,6 +22,7 @@ import org.apache.lucene.search.SortField; import org.apache.lucene.search.cache.CachedArrayCreator; import org.apache.lucene.search.cache.LongValuesCreator; import org.apache.solr.response.TextResponseWriter; +import org.apache.solr.search.QParser; import org.apache.solr.search.function.ValueSource; import org.apache.solr.search.function.LongFieldSource; @@ -42,7 +43,8 @@ public class LongField extends FieldType { return new SortField(field.name,SortField.LONG, reverse); } - public ValueSource getValueSource(SchemaField field) { + @Override + public ValueSource getValueSource(SchemaField field, QParser qparser) { return new LongFieldSource( new LongValuesCreator( field.name, null, CachedArrayCreator.CACHE_VALUES_AND_BITS ) ); } diff --git a/solr/src/java/org/apache/solr/schema/RandomSortField.java b/solr/src/java/org/apache/solr/schema/RandomSortField.java index 2ac65106eae..1a2891f8ecc 100644 --- a/solr/src/java/org/apache/solr/schema/RandomSortField.java +++ b/solr/src/java/org/apache/solr/schema/RandomSortField.java @@ -24,6 +24,7 @@ import org.apache.lucene.document.Fieldable; import org.apache.lucene.index.IndexReader; import org.apache.lucene.search.*; import org.apache.solr.response.TextResponseWriter; +import org.apache.solr.search.QParser; import org.apache.solr.search.function.DocValues; import org.apache.solr.search.function.ValueSource; import org.apache.solr.search.SolrIndexReader; @@ -95,7 +96,7 @@ public class RandomSortField extends FieldType { } @Override - public ValueSource getValueSource(SchemaField field) { + public ValueSource getValueSource(SchemaField field, QParser qparser) { return new RandomValueSource(field.getName()); } diff --git a/solr/src/java/org/apache/solr/schema/ShortField.java b/solr/src/java/org/apache/solr/schema/ShortField.java index ba68543c1b9..94c77450a74 100644 --- a/solr/src/java/org/apache/solr/schema/ShortField.java +++ b/solr/src/java/org/apache/solr/schema/ShortField.java @@ -22,6 +22,7 @@ import org.apache.lucene.search.cache.CachedArrayCreator; import org.apache.lucene.search.cache.ShortValuesCreator; import org.apache.solr.response.TextResponseWriter; +import org.apache.solr.search.QParser; import org.apache.solr.search.function.ValueSource; import org.apache.solr.search.function.ShortFieldSource; @@ -45,7 +46,8 @@ public class ShortField extends FieldType { return new SortField(field.name, SortField.SHORT, reverse); } - public ValueSource getValueSource(SchemaField field) { + @Override + public ValueSource getValueSource(SchemaField field, QParser qparser) { return new ShortFieldSource(new ShortValuesCreator( field.name, null, CachedArrayCreator.CACHE_VALUES_AND_BITS ) ); } diff --git a/solr/src/java/org/apache/solr/schema/SortableDoubleField.java b/solr/src/java/org/apache/solr/schema/SortableDoubleField.java index 99112568321..f1744efc688 100644 --- a/solr/src/java/org/apache/solr/schema/SortableDoubleField.java +++ b/solr/src/java/org/apache/solr/schema/SortableDoubleField.java @@ -22,6 +22,7 @@ import org.apache.lucene.util.BytesRef; import org.apache.noggit.CharArr; import org.apache.solr.search.MutableValueDouble; import org.apache.solr.search.MutableValue; +import org.apache.solr.search.QParser; import org.apache.solr.search.function.ValueSource; import org.apache.solr.search.function.FieldCacheSource; import org.apache.solr.search.function.DocValues; @@ -45,7 +46,8 @@ public class SortableDoubleField extends FieldType { return getStringSort(field,reverse); } - public ValueSource getValueSource(SchemaField field) { + @Override + public ValueSource getValueSource(SchemaField field, QParser qparser) { return new SortableDoubleFieldSource(field.name); } diff --git a/solr/src/java/org/apache/solr/schema/SortableFloatField.java b/solr/src/java/org/apache/solr/schema/SortableFloatField.java index 0737aa65525..407c17f90e3 100644 --- a/solr/src/java/org/apache/solr/schema/SortableFloatField.java +++ b/solr/src/java/org/apache/solr/schema/SortableFloatField.java @@ -22,6 +22,7 @@ import org.apache.lucene.util.BytesRef; import org.apache.noggit.CharArr; import org.apache.solr.search.MutableValueFloat; import org.apache.solr.search.MutableValue; +import org.apache.solr.search.QParser; import org.apache.solr.search.function.ValueSource; import org.apache.solr.search.function.FieldCacheSource; import org.apache.solr.search.function.DocValues; @@ -45,7 +46,8 @@ public class SortableFloatField extends FieldType { return getStringSort(field,reverse); } - public ValueSource getValueSource(SchemaField field) { + @Override + public ValueSource getValueSource(SchemaField field, QParser qparser) { return new SortableFloatFieldSource(field.name); } diff --git a/solr/src/java/org/apache/solr/schema/SortableIntField.java b/solr/src/java/org/apache/solr/schema/SortableIntField.java index 19b7738223b..3771d3eb0e2 100644 --- a/solr/src/java/org/apache/solr/schema/SortableIntField.java +++ b/solr/src/java/org/apache/solr/schema/SortableIntField.java @@ -22,6 +22,7 @@ import org.apache.lucene.util.BytesRef; import org.apache.noggit.CharArr; import org.apache.solr.search.MutableValueInt; import org.apache.solr.search.MutableValue; +import org.apache.solr.search.QParser; import org.apache.solr.search.function.ValueSource; import org.apache.solr.search.function.FieldCacheSource; import org.apache.solr.search.function.DocValues; @@ -45,7 +46,8 @@ public class SortableIntField extends FieldType { return getStringSort(field,reverse); } - public ValueSource getValueSource(SchemaField field) { + @Override + public ValueSource getValueSource(SchemaField field, QParser qparser) { return new SortableIntFieldSource(field.name); } diff --git a/solr/src/java/org/apache/solr/schema/SortableLongField.java b/solr/src/java/org/apache/solr/schema/SortableLongField.java index 627d3fa9f4d..b9657d1451a 100644 --- a/solr/src/java/org/apache/solr/schema/SortableLongField.java +++ b/solr/src/java/org/apache/solr/schema/SortableLongField.java @@ -22,6 +22,7 @@ import org.apache.lucene.util.BytesRef; import org.apache.noggit.CharArr; import org.apache.solr.search.MutableValueLong; import org.apache.solr.search.MutableValue; +import org.apache.solr.search.QParser; import org.apache.solr.search.function.ValueSource; import org.apache.solr.search.function.FieldCacheSource; import org.apache.solr.search.function.DocValues; @@ -45,7 +46,8 @@ public class SortableLongField extends FieldType { return getStringSort(field,reverse); } - public ValueSource getValueSource(SchemaField field) { + @Override + public ValueSource getValueSource(SchemaField field, QParser qparser) { return new SortableLongFieldSource(field.name); } diff --git a/solr/src/java/org/apache/solr/schema/TrieField.java b/solr/src/java/org/apache/solr/schema/TrieField.java index bcbc2f68b35..2e57c90b56b 100644 --- a/solr/src/java/org/apache/solr/schema/TrieField.java +++ b/solr/src/java/org/apache/solr/schema/TrieField.java @@ -174,7 +174,8 @@ public class TrieField extends FieldType { } } - public ValueSource getValueSource(SchemaField field) { + @Override + public ValueSource getValueSource(SchemaField field, QParser qparser) { int flags = CachedArrayCreator.CACHE_VALUES_AND_BITS; switch (type) { case INTEGER: diff --git a/solr/src/java/org/apache/solr/schema/UUIDField.java b/solr/src/java/org/apache/solr/schema/UUIDField.java index aab3709be27..f1bfa424bff 100644 --- a/solr/src/java/org/apache/solr/schema/UUIDField.java +++ b/solr/src/java/org/apache/solr/schema/UUIDField.java @@ -35,7 +35,7 @@ import org.apache.solr.response.TextResponseWriter; * @see UUID#randomUUID * @version $Id$ */ -public class UUIDField extends FieldType { +public class UUIDField extends StrField { private static final String NEW = "NEW"; private static final char DASH='-'; diff --git a/solr/src/java/org/apache/solr/update/DirectUpdateHandler.java b/solr/src/java/org/apache/solr/update/DirectUpdateHandler.java deleted file mode 100644 index a70f9461579..00000000000 --- a/solr/src/java/org/apache/solr/update/DirectUpdateHandler.java +++ /dev/null @@ -1,401 +0,0 @@ -/** - * 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 org.apache.lucene.index.IndexWriter; -import org.apache.lucene.index.IndexReader; -import org.apache.lucene.index.DocsEnum; -import org.apache.lucene.index.Term; -import org.apache.lucene.index.MultiFields; -import org.apache.lucene.document.Document; -import org.apache.lucene.search.Query; -import org.apache.lucene.util.BytesRef; - -import java.util.HashSet; -import java.util.concurrent.Future; -import java.util.concurrent.ExecutionException; -import java.io.IOException; -import java.net.URL; - -import org.apache.solr.search.SolrIndexSearcher; -import org.apache.solr.search.QueryParsing; -import org.apache.solr.common.SolrException; -import org.apache.solr.common.util.NamedList; -import org.apache.solr.common.util.SimpleOrderedMap; -import org.apache.solr.core.SolrCore; - -/** - * DirectUpdateHandler implements an UpdateHandler where documents are added - * directly to the main lucene index as opposed to adding to a separate smaller index. - * For this reason, not all combinations to/from pending and committed are supported. - * - * @version $Id$ - * @since solr 0.9 - * - * @deprecated Use {@link DirectUpdateHandler2} instead. This is only kept around for back-compatibility (way back). - */ -@Deprecated -public class DirectUpdateHandler extends UpdateHandler { - - // the set of ids in the "pending set" (those docs that have been added, but - // that are not yet visible. - final HashSet pset; - IndexWriter writer; - SolrIndexSearcher searcher; - int numAdds=0; // number of docs added to the pending set - int numPending=0; // number of docs currently in this pending set - int numDeleted=0; // number of docs deleted or - - - public DirectUpdateHandler(SolrCore core) throws IOException { - super(core); - pset = new HashSet(256); - } - - - protected void openWriter() throws IOException { - if (writer==null) { - writer = createMainIndexWriter("DirectUpdateHandler", false); - } - } - - protected void closeWriter() throws IOException { - try { - if (writer!=null) writer.close(); - } finally { - // TODO: if an exception causes the writelock to not be - // released, we could delete it here. - writer=null; - } - } - - protected void openSearcher() throws IOException { - if (searcher==null) { - searcher = core.newSearcher("DirectUpdateHandler"); - } - } - - protected void closeSearcher() throws IOException { - try { - if (searcher!=null) searcher.close(); - } finally { - // TODO: if an exception causes the writelock to not be - // released, we could delete it here. - searcher=null; - } - } - - protected void doAdd(Document doc) throws IOException { - closeSearcher(); openWriter(); - writer.addDocument(doc); - } - - protected boolean existsInIndex(String indexedId) throws IOException { - if (idField == null) throw new SolrException( SolrException.ErrorCode.BAD_REQUEST,"Operation requires schema to have a unique key field"); - - closeWriter(); - openSearcher(); - IndexReader ir = searcher.getReader(); - Term idTerm = idTerm(indexedId); - DocsEnum tdocs = MultiFields.getTermDocsEnum(ir, - MultiFields.getDeletedDocs(ir), - idTerm.field(), - idTerm.bytes()); - if (tdocs != null) { - return tdocs.nextDoc() != DocsEnum.NO_MORE_DOCS; - } else { - return false; - } - } - - - protected int deleteInIndex(String indexedId) throws IOException { - if (idField == null) throw new SolrException( SolrException.ErrorCode.BAD_REQUEST,"Operation requires schema to have a unique key field"); - - closeWriter(); openSearcher(); - IndexReader ir = searcher.getReader(); - int num=0; - Term term = new Term(idField.getName(), indexedId); - num = ir.deleteDocuments(term); - if (core.log.isTraceEnabled()) { - core.log.trace( core.getLogId()+"deleted " + num + " docs matching id " + idFieldType.indexedToReadable(indexedId)); - } - return num; - } - - protected void overwrite(String indexedId, Document doc) throws IOException { - if (indexedId ==null) indexedId =getIndexedId(doc); - deleteInIndex(indexedId); - doAdd(doc); - } - - /************** Direct update handler - pseudo code *********** - def add(doc, id, allowDups, overwritePending, overwriteCommitted): - if not overwritePending and not overwriteCommitted: - #special case... no need to check pending set, and we don't keep - #any state around about this addition - if allowDups: - committed[id]=doc #100 - return - else: - #if no dups allowed, we must check the *current* index (pending and committed) - if not committed[id]: committed[id]=doc #000 - return - #001 (searchd addConditionally) - if not allowDups and not overwritePending and pending[id]: return - del committed[id] #delete from pending and committed 111 011 - committed[id]=doc - pending[id]=True - ****************************************************************/ - - // could return the number of docs deleted, but is that always possible to know??? - public void delete(DeleteUpdateCommand cmd) throws IOException { - if (!cmd.fromPending && !cmd.fromCommitted) - throw new SolrException( SolrException.ErrorCode.BAD_REQUEST,"meaningless command: " + cmd); - if (!cmd.fromPending || !cmd.fromCommitted) - throw new SolrException( SolrException.ErrorCode.BAD_REQUEST,"operation not supported" + cmd); - String indexedId = idFieldType.toInternal(cmd.id); - synchronized(this) { - deleteInIndex(indexedId); - pset.remove(indexedId); - } - } - - // TODO - return number of docs deleted? - // Depending on implementation, we may not be able to immediately determine num... - public void deleteByQuery(DeleteUpdateCommand cmd) throws IOException { - if (!cmd.fromPending && !cmd.fromCommitted) - throw new SolrException( SolrException.ErrorCode.BAD_REQUEST,"meaningless command: " + cmd); - if (!cmd.fromPending || !cmd.fromCommitted) - throw new SolrException( SolrException.ErrorCode.BAD_REQUEST,"operation not supported: " + cmd); - - Query q = QueryParsing.parseQuery(cmd.query, schema); - - int totDeleted = 0; - synchronized(this) { - closeWriter(); openSearcher(); - - // if we want to count the number of docs that were deleted, then - // we need a new instance of the DeleteHitCollector - final DeleteHitCollector deleter = new DeleteHitCollector(searcher); - searcher.search(q, null, deleter); - totDeleted = deleter.deleted; - } - - if (core.log.isDebugEnabled()) { - core.log.debug(core.getLogId()+"docs deleted:" + totDeleted); - } - - } - - /**************** old hit collector... new one is in base class - // final DeleteHitCollector deleter = new DeleteHitCollector(); - class DeleteHitCollector extends HitCollector { - public int deleted=0; - public void collect(int doc, float score) { - try { - searcher.getReader().delete(doc); - deleted++; - } catch (IOException e) { - try { closeSearcher(); } catch (Exception ee) { SolrException.log(SolrCore.log,ee); } - SolrException.log(SolrCore.log,e); - throw new SolrException( SolrException.StatusCode.SERVER_ERROR,"Error deleting doc# "+doc,e); - } - } - } - ***************************/ - - public int mergeIndexes(MergeIndexesCommand cmd) throws IOException { - throw new SolrException( - SolrException.ErrorCode.BAD_REQUEST, - "DirectUpdateHandler doesn't support mergeIndexes. Use DirectUpdateHandler2 instead."); - } - - public void commit(CommitUpdateCommand cmd) throws IOException { - Future[] waitSearcher = null; - if (cmd.waitSearcher) { - waitSearcher = new Future[1]; - } - - synchronized (this) { - pset.clear(); - closeSearcher(); // flush any deletes - if (cmd.optimize || cmd.expungeDeletes) { - openWriter(); // writer needs to be open to optimize - if(cmd.optimize) writer.optimize(cmd.maxOptimizeSegments); - if(cmd.expungeDeletes) writer.expungeDeletes(cmd.expungeDeletes); - } - closeWriter(); - - callPostCommitCallbacks(); - if (cmd.optimize) { - callPostOptimizeCallbacks(); - } - - core.getSearcher(true,false,waitSearcher); - } - - if (waitSearcher!=null && waitSearcher[0] != null) { - try { - waitSearcher[0].get(); - } catch (InterruptedException e) { - SolrException.log(log,e); - } catch (ExecutionException e) { - SolrException.log(log,e); - } - } - } - - /** - * @since Solr 1.4 - */ - public void rollback(RollbackUpdateCommand cmd) throws IOException { - throw new SolrException( SolrException.ErrorCode.BAD_REQUEST, - "DirectUpdateHandler doesn't support rollback. Use DirectUpdateHandler2 instead."); - } - - - /////////////////////////////////////////////////////////////////// - /////////////////// helper method for each add type /////////////// - /////////////////////////////////////////////////////////////////// - - protected int addNoOverwriteNoDups(AddUpdateCommand cmd) throws IOException { - if (cmd.indexedId ==null) { - cmd.indexedId =getIndexedId(cmd.doc); - } - synchronized (this) { - if (existsInIndex(cmd.indexedId)) return 0; - doAdd(cmd.doc); - } - return 1; - } - - protected int addConditionally(AddUpdateCommand cmd) throws IOException { - if (cmd.indexedId ==null) { - cmd.indexedId =getIndexedId(cmd.doc); - } - synchronized(this) { - if (pset.contains(cmd.indexedId)) return 0; - // since case 001 is currently the only case to use pset, only add - // to it in that instance. - pset.add(cmd.indexedId); - overwrite(cmd.indexedId,cmd.doc); - return 1; - } - } - - - // overwrite both pending and committed - protected synchronized int overwriteBoth(AddUpdateCommand cmd) throws IOException { - overwrite(cmd.indexedId, cmd.doc); - return 1; - } - - - // add without checking - protected synchronized int allowDups(AddUpdateCommand cmd) throws IOException { - doAdd(cmd.doc); - return 1; - } - - - 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) { - return addConditionally(cmd); - } else if (!cmd.allowDups && cmd.overwritePending && !cmd.overwriteCommitted) { - // return overwriteBoth(cmd); - throw new SolrException( SolrException.ErrorCode.BAD_REQUEST,"unsupported param combo:" + cmd); - } else if (!cmd.allowDups && cmd.overwritePending && cmd.overwriteCommitted) { - return overwriteBoth(cmd); - } else if (cmd.allowDups && !cmd.overwritePending && !cmd.overwriteCommitted) { - return allowDups(cmd); - } else if (cmd.allowDups && !cmd.overwritePending && cmd.overwriteCommitted) { - // return overwriteBoth(cmd); - throw new SolrException( SolrException.ErrorCode.BAD_REQUEST,"unsupported param combo:" + cmd); - } else if (cmd.allowDups && cmd.overwritePending && !cmd.overwriteCommitted) { - // return overwriteBoth(cmd); - throw new SolrException( SolrException.ErrorCode.BAD_REQUEST,"unsupported param combo:" + cmd); - } else if (cmd.allowDups && cmd.overwritePending && cmd.overwriteCommitted) { - return overwriteBoth(cmd); - } - throw new SolrException( SolrException.ErrorCode.BAD_REQUEST,"unsupported param combo:" + cmd); - } - - public void close() throws IOException { - synchronized(this) { - closeSearcher(); - closeWriter(); - } - } - - - - ///////////////////////////////////////////////////////////////////// - // SolrInfoMBean stuff: Statistics and Module Info - ///////////////////////////////////////////////////////////////////// - - public String getName() { - return DirectUpdateHandler.class.getName(); - } - - public String getVersion() { - return SolrCore.version; - } - - public String getDescription() { - return "Update handler that directly changes the on-disk main lucene index"; - } - - public Category getCategory() { - return Category.CORE; - } - - public String getSourceId() { - return "$Id$"; - } - - public String getSource() { - return "$URL$"; - } - - public URL[] getDocs() { - return null; - } - - public NamedList getStatistics() { - NamedList lst = new SimpleOrderedMap(); - return lst; - } - - - - -}