X-Git-Url: https://git.mdrn.pl/pylucene.git/blobdiff_plain/a2e61f0c04805cfcb8706176758d1283c7e3a55c..aaeed5504b982cf3545252ab528713250aa33eed:/lucene-java-3.4.0/lucene/src/java/org/apache/lucene/search/spans/SpanNotQuery.java?ds=sidebyside diff --git a/lucene-java-3.4.0/lucene/src/java/org/apache/lucene/search/spans/SpanNotQuery.java b/lucene-java-3.4.0/lucene/src/java/org/apache/lucene/search/spans/SpanNotQuery.java deleted file mode 100644 index c6e891b..0000000 --- a/lucene-java-3.4.0/lucene/src/java/org/apache/lucene/search/spans/SpanNotQuery.java +++ /dev/null @@ -1,212 +0,0 @@ -package org.apache.lucene.search.spans; - -/** - * 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.lucene.index.IndexReader; -import org.apache.lucene.index.Term; -import org.apache.lucene.search.Query; -import org.apache.lucene.util.ToStringUtils; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Set; - -/** Removes matches which overlap with another SpanQuery. */ -public class SpanNotQuery extends SpanQuery implements Cloneable { - private SpanQuery include; - private SpanQuery exclude; - - /** Construct a SpanNotQuery matching spans from include which - * have no overlap with spans from exclude.*/ - public SpanNotQuery(SpanQuery include, SpanQuery exclude) { - this.include = include; - this.exclude = exclude; - - if (!include.getField().equals(exclude.getField())) - throw new IllegalArgumentException("Clauses must have same field."); - } - - /** Return the SpanQuery whose matches are filtered. */ - public SpanQuery getInclude() { return include; } - - /** Return the SpanQuery whose matches must not overlap those returned. */ - public SpanQuery getExclude() { return exclude; } - - @Override - public String getField() { return include.getField(); } - - @Override - public void extractTerms(Set terms) { include.extractTerms(terms); } - - @Override - public String toString(String field) { - StringBuilder buffer = new StringBuilder(); - buffer.append("spanNot("); - buffer.append(include.toString(field)); - buffer.append(", "); - buffer.append(exclude.toString(field)); - buffer.append(")"); - buffer.append(ToStringUtils.boost(getBoost())); - return buffer.toString(); - } - - @Override - public Object clone() { - SpanNotQuery spanNotQuery = new SpanNotQuery((SpanQuery)include.clone(),(SpanQuery) exclude.clone()); - spanNotQuery.setBoost(getBoost()); - return spanNotQuery; - } - - @Override - public Spans getSpans(final IndexReader reader) throws IOException { - return new Spans() { - private Spans includeSpans = include.getSpans(reader); - private boolean moreInclude = true; - - private Spans excludeSpans = exclude.getSpans(reader); - private boolean moreExclude = excludeSpans.next(); - - @Override - public boolean next() throws IOException { - if (moreInclude) // move to next include - moreInclude = includeSpans.next(); - - while (moreInclude && moreExclude) { - - if (includeSpans.doc() > excludeSpans.doc()) // skip exclude - moreExclude = excludeSpans.skipTo(includeSpans.doc()); - - while (moreExclude // while exclude is before - && includeSpans.doc() == excludeSpans.doc() - && excludeSpans.end() <= includeSpans.start()) { - moreExclude = excludeSpans.next(); // increment exclude - } - - if (!moreExclude // if no intersection - || includeSpans.doc() != excludeSpans.doc() - || includeSpans.end() <= excludeSpans.start()) - break; // we found a match - - moreInclude = includeSpans.next(); // intersected: keep scanning - } - return moreInclude; - } - - @Override - public boolean skipTo(int target) throws IOException { - if (moreInclude) // skip include - moreInclude = includeSpans.skipTo(target); - - if (!moreInclude) - return false; - - if (moreExclude // skip exclude - && includeSpans.doc() > excludeSpans.doc()) - moreExclude = excludeSpans.skipTo(includeSpans.doc()); - - while (moreExclude // while exclude is before - && includeSpans.doc() == excludeSpans.doc() - && excludeSpans.end() <= includeSpans.start()) { - moreExclude = excludeSpans.next(); // increment exclude - } - - if (!moreExclude // if no intersection - || includeSpans.doc() != excludeSpans.doc() - || includeSpans.end() <= excludeSpans.start()) - return true; // we found a match - - return next(); // scan to next match - } - - @Override - public int doc() { return includeSpans.doc(); } - @Override - public int start() { return includeSpans.start(); } - @Override - public int end() { return includeSpans.end(); } - - // TODO: Remove warning after API has been finalized - @Override - public Collection getPayload() throws IOException { - ArrayList result = null; - if (includeSpans.isPayloadAvailable()) { - result = new ArrayList(includeSpans.getPayload()); - } - return result; - } - - // TODO: Remove warning after API has been finalized - @Override - public boolean isPayloadAvailable() { - return includeSpans.isPayloadAvailable(); - } - - @Override - public String toString() { - return "spans(" + SpanNotQuery.this.toString() + ")"; - } - - }; - } - - @Override - public Query rewrite(IndexReader reader) throws IOException { - SpanNotQuery clone = null; - - SpanQuery rewrittenInclude = (SpanQuery) include.rewrite(reader); - if (rewrittenInclude != include) { - clone = (SpanNotQuery) this.clone(); - clone.include = rewrittenInclude; - } - SpanQuery rewrittenExclude = (SpanQuery) exclude.rewrite(reader); - if (rewrittenExclude != exclude) { - if (clone == null) clone = (SpanNotQuery) this.clone(); - clone.exclude = rewrittenExclude; - } - - if (clone != null) { - return clone; // some clauses rewrote - } else { - return this; // no clauses rewrote - } - } - - /** Returns true iff o is equal to this. */ - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof SpanNotQuery)) return false; - - SpanNotQuery other = (SpanNotQuery)o; - return this.include.equals(other.include) - && this.exclude.equals(other.exclude) - && this.getBoost() == other.getBoost(); - } - - @Override - public int hashCode() { - int h = include.hashCode(); - h = (h<<1) | (h >>> 31); // rotate left - h ^= exclude.hashCode(); - h = (h<<1) | (h >>> 31); // rotate left - h ^= Float.floatToRawIntBits(getBoost()); - return h; - } - -}