lucene-java-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rm...@apache.org
Subject svn commit: r887283 - in /lucene/java/branches/flex_1458/src/java/org/apache/lucene/search: SingleTermsEnum.java WildcardQuery.java
Date Fri, 04 Dec 2009 17:30:58 GMT
Author: rmuir
Date: Fri Dec  4 17:30:57 2009
New Revision: 887283

URL: http://svn.apache.org/viewvc?rev=887283&view=rev
Log:
LUCENE-2113: Add SingleTermsEnum

Added:
    lucene/java/branches/flex_1458/src/java/org/apache/lucene/search/SingleTermsEnum.java
  (with props)
Modified:
    lucene/java/branches/flex_1458/src/java/org/apache/lucene/search/WildcardQuery.java

Added: lucene/java/branches/flex_1458/src/java/org/apache/lucene/search/SingleTermsEnum.java
URL: http://svn.apache.org/viewvc/lucene/java/branches/flex_1458/src/java/org/apache/lucene/search/SingleTermsEnum.java?rev=887283&view=auto
==============================================================================
--- lucene/java/branches/flex_1458/src/java/org/apache/lucene/search/SingleTermsEnum.java
(added)
+++ lucene/java/branches/flex_1458/src/java/org/apache/lucene/search/SingleTermsEnum.java
Fri Dec  4 17:30:57 2009
@@ -0,0 +1,80 @@
+package org.apache.lucene.search;
+
+/**
+ * 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 java.io.IOException;
+
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.Term;
+import org.apache.lucene.index.TermRef;
+import org.apache.lucene.index.Terms;
+
+/**
+ * Subclass of FilteredTermsEnum for enumerating a single term.
+ * <p>
+ * This can be used by {@link MultiTermQuery}s that need only visit one term,
+ * but want to preserve MultiTermQuery semantics such as
+ * {@link MultiTermQuery#rewriteMethod}.
+ */
+public class SingleTermsEnum extends FilteredTermsEnum {
+  private final Term singleTerm;
+  private final TermRef singleRef;
+  private final boolean empty;
+  
+  /**
+   * Creates a new <code>SingleTermsEnum</code>.
+   * <p>
+   * After calling the constructor the enumeration is already pointing to the term,
+   * if it exists.
+   */
+  public SingleTermsEnum(IndexReader reader, Term singleTerm) throws IOException {
+    this.singleTerm = singleTerm;
+    Terms terms = reader.fields().terms(singleTerm.field());
+    if (terms != null) {
+      singleRef = new TermRef(singleTerm.text());
+      empty = setEnum(terms.iterator(), singleRef) == null;
+    } else {
+      empty = true;
+      singleRef = null;
+    }
+  }
+
+  @Override
+  protected AcceptStatus accept(TermRef term) {
+    if (term.equals(singleRef)) {
+      return AcceptStatus.YES;
+    } else {
+      return AcceptStatus.END;
+    }
+  }
+
+  @Override
+  public float difference() {
+    return 1.0F;
+  }
+
+  @Override
+  public boolean empty() {
+    return empty;
+  }
+
+  @Override
+  public String field() {
+    return singleTerm.field();
+  }
+}

Propchange: lucene/java/branches/flex_1458/src/java/org/apache/lucene/search/SingleTermsEnum.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: lucene/java/branches/flex_1458/src/java/org/apache/lucene/search/WildcardQuery.java
URL: http://svn.apache.org/viewvc/lucene/java/branches/flex_1458/src/java/org/apache/lucene/search/WildcardQuery.java?rev=887283&r1=887282&r2=887283&view=diff
==============================================================================
--- lucene/java/branches/flex_1458/src/java/org/apache/lucene/search/WildcardQuery.java (original)
+++ lucene/java/branches/flex_1458/src/java/org/apache/lucene/search/WildcardQuery.java Fri
Dec  4 17:30:57 2009
@@ -50,11 +50,12 @@
         && (text.indexOf('*') == text.length() - 1);
   }
   
-  // nocommit: needs singletermenum stuff
   @Override
   protected FilteredTermsEnum getTermsEnum(IndexReader reader) throws IOException {
-    //nocommit: handle singletermenum
-    return new WildcardTermsEnum(reader, getTerm());
+    if (termContainsWildcard)
+      return new WildcardTermsEnum(reader, getTerm());
+    else
+      return new SingleTermsEnum(reader, getTerm());
   }
   
   // @deprecated see getTermsEnum



Mime
View raw message