/* * 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. */ using System; using Document = Lucene.Net.Documents.Document; using FieldSelector = Lucene.Net.Documents.FieldSelector; using CorruptIndexException = Lucene.Net.Index.CorruptIndexException; using Term = Lucene.Net.Index.Term; namespace Lucene.Net.Search { /// The interface for search implementations. /// ///

/// Searchable is the abstract network protocol for searching. Implementations /// provide search over a single index, over multiple indices, and over indices /// on remote servers. /// ///

/// Queries, filters and sort criteria are designed to be compact so that they /// may be efficiently passed to a remote index, with only the top-scoring hits /// being returned, rather than every matching hit. /// /// NOTE: this interface is kept public for convenience. Since it is not /// expected to be implemented directly, it may be changed unexpectedly between /// releases. ///

public interface Searchable { /// Lower-level search API. /// ///

{@link HitCollector#Collect(int,float)} is called for every non-zero /// scoring document. ///
HitCollector-based access to remote indexes is discouraged. /// ///

Applications should only use this if they need all of the /// matching documents. The high-level search API ({@link /// Searcher#Search(Query)}) is usually more efficient, as it skips /// non-high-scoring hits. /// ///

/// to match documents /// /// if non-null, used to permit documents to be collected. /// /// to receive hits /// /// BooleanQuery.TooManyClauses /// use {@link #Search(Weight, Filter, Collector)} instead. /// [Obsolete("use Search(Weight, Filter, Collector) instead.")] void Search(Weight weight, Filter filter, HitCollector results); /// Lower-level search API. /// ///

/// {@link Collector#Collect(int)} is called for every document.
/// Collector-based access to remote indexes is discouraged. /// ///

/// Applications should only use this if they need all of the matching /// documents. The high-level search API ({@link Searcher#Search(Query)}) is /// usually more efficient, as it skips non-high-scoring hits. /// ///

/// to match documents /// /// if non-null, used to permit documents to be collected. /// /// to receive hits /// /// BooleanQuery.TooManyClauses void Search(Weight weight, Filter filter, Collector collector); /// Frees resources associated with this Searcher. /// Be careful not to call this method while you are still using objects /// like {@link Hits}. /// void Close(); /// Expert: Returns the number of documents containing term. /// Called by search code to compute term weights. /// /// /// int DocFreq(Term term); /// Expert: For each term in the terms array, calculates the number of /// documents containing term. Returns an array with these /// document frequencies. Used to minimize number of remote calls. /// int[] DocFreqs(Term[] terms); /// Expert: Returns one greater than the largest possible document number. /// Called by search code to compute term weights. /// /// /// int MaxDoc(); /// Expert: Low-level search implementation. Finds the top n /// hits for query, applying filter if non-null. /// ///

Called by {@link Hits}. /// ///

Applications should usually call {@link Searcher#Search(Query)} or /// {@link Searcher#Search(Query,Filter)} instead. ///

/// BooleanQuery.TooManyClauses TopDocs Search(Weight weight, Filter filter, int n); /// Expert: Returns the stored fields of document i. /// Called by {@link HitCollector} implementations. /// /// /// /// CorruptIndexException if the index is corrupt /// IOException if there is a low-level IO error Document Doc(int i); /// Get the {@link Lucene.Net.Documents.Document} at the nth position. The {@link Lucene.Net.Documents.FieldSelector} /// may be used to determine what {@link Lucene.Net.Documents.Field}s to load and how they should be loaded. /// /// NOTE: If the underlying Reader (more specifically, the underlying FieldsReader) is closed before the lazy {@link Lucene.Net.Documents.Field} is /// loaded an exception may be thrown. If you want the value of a lazy {@link Lucene.Net.Documents.Field} to be available after closing you must /// explicitly load it or fetch the Document again with a new loader. /// /// /// /// Get the document at the nth position /// /// The {@link Lucene.Net.Documents.FieldSelector} to use to determine what Fields should be loaded on the Document. May be null, in which case all Fields will be loaded. /// /// The stored fields of the {@link Lucene.Net.Documents.Document} at the nth position /// /// CorruptIndexException if the index is corrupt /// IOException if there is a low-level IO error /// /// /// /// /// /// /// /// /// /// /// /// Document Doc(int n, FieldSelector fieldSelector); /// Expert: called to re-write queries into primitive queries. /// BooleanQuery.TooManyClauses Query Rewrite(Query query); /// Expert: low-level implementation method /// Returns an Explanation that describes how doc scored against /// weight. /// ///

This is intended to be used in developing Similarity implementations, /// and, for good performance, should not be displayed with every hit. /// Computing an explanation is as expensive as executing the query over the /// entire index. ///

Applications should call {@link Searcher#Explain(Query, int)}. ///

/// BooleanQuery.TooManyClauses Explanation Explain(Weight weight, int doc); /// Expert: Low-level search implementation with arbitrary sorting. Finds /// the top n hits for query, applying /// filter if non-null, and sorting the hits by the criteria in /// sort. /// ///

Applications should usually call /// {@link Searcher#Search(Query,Filter,int,Sort)} instead. /// ///

/// BooleanQuery.TooManyClauses TopFieldDocs Search(Weight weight, Filter filter, int n, Sort sort); } }