blob: a8da549f6968bf95e75373fcd7cadd299771bc69 [file] [log] [blame]
/*
* 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.search;
import org.apache.lucene.util.Accountable;
import org.apache.solr.common.SolrException;
/**
* <code>DocSet</code> represents an unordered set of Lucene Document Ids.
*
* <p>
* WARNING: Any DocSet returned from SolrIndexSearcher should <b>not</b> be modified as it may have been retrieved from
* a cache and could be shared.
* </p>
*
* @since solr 0.9
*/
public interface DocSet extends Accountable, Cloneable /* extends Collection<Integer> */ {
/**
* Adds the specified document if it is not currently in the DocSet
* (optional operation).
*
* @see #addUnique
* @throws SolrException if the implementation does not allow modifications
*/
@Deprecated // to-be read-only, see SOLR-14256
public void add(int doc);
/**
* Adds a document the caller knows is not currently in the DocSet
* (optional operation).
*
* <p>
* This method may be faster then <code>add(doc)</code> in some
* implementations provided the caller is certain of the precondition.
* </p>
*
* @see #add
* @throws SolrException if the implementation does not allow modifications
*/
@Deprecated // to-be read-only, see SOLR-14256
public void addUnique(int doc);
/**
* Returns the number of documents in the set.
*/
public int size();
/**
* Returns true if a document is in the DocSet.
*/
public boolean exists(int docid);
/**
* Returns an iterator that may be used to iterate over all of the documents in the set.
*
* <p>
* The order of the documents returned by this iterator is
* non-deterministic, and any scoring information is meaningless
* </p>
*/
public DocIterator iterator();
/**
* Returns the intersection of this set with another set. Neither set is modified - a new DocSet is
* created and returned.
* @return a DocSet representing the intersection
*/
public DocSet intersection(DocSet other);
/**
* Returns the number of documents of the intersection of this set with another set.
* May be more efficient than actually creating the intersection and then getting its size.
*/
public int intersectionSize(DocSet other);
/** Returns true if these sets have any elements in common */
public boolean intersects(DocSet other);
/**
* Returns the union of this set with another set. Neither set is modified - a new DocSet is
* created and returned.
* @return a DocSet representing the union
*/
public DocSet union(DocSet other);
/**
* Returns the number of documents of the union of this set with another set.
* May be more efficient than actually creating the union and then getting its size.
*/
public int unionSize(DocSet other);
/**
* Returns the documents in this set that are not in the other set. Neither set is modified - a new DocSet is
* created and returned.
* @return a DocSet representing this AND NOT other
*/
public DocSet andNot(DocSet other);
/**
* Returns the number of documents in this set that are not in the other set.
*/
public int andNotSize(DocSet other);
/**
* Returns a Filter for use in Lucene search methods, assuming this DocSet
* was generated from the top-level MultiReader that the Lucene search
* methods will be invoked with.
*/
public Filter getTopFilter();
/**
* Adds all the docs from this set to the target set. The target should be
* sized large enough to accommodate all of the documents before calling this
* method.
*/
@Deprecated // to-be read-only, see SOLR-14256
public void addAllTo(DocSet target);
public DocSet clone();
public static DocSet EMPTY = new SortedIntDocSet(new int[0], 0);
}