Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/Lucene.Net.Light.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/Search/Searcher.cs')
-rw-r--r--src/core/Search/Searcher.cs192
1 files changed, 192 insertions, 0 deletions
diff --git a/src/core/Search/Searcher.cs b/src/core/Search/Searcher.cs
new file mode 100644
index 0000000..a545e11
--- /dev/null
+++ b/src/core/Search/Searcher.cs
@@ -0,0 +1,192 @@
+/*
+ * 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 Lucene.Net.Documents;
+using Document = Lucene.Net.Documents.Document;
+using CorruptIndexException = Lucene.Net.Index.CorruptIndexException;
+using Term = Lucene.Net.Index.Term;
+
+namespace Lucene.Net.Search
+{
+
+ /// <summary> An abstract base class for search implementations. Implements the main search
+ /// methods.
+ ///
+ /// <p/>
+ /// Note that you can only access hits from a Searcher as long as it is not yet
+ /// closed, otherwise an IOException will be thrown.
+ /// </summary>
+ public abstract class Searcher : System.MarshalByRefObject, Searchable, System.IDisposable
+ {
+ protected Searcher()
+ {
+ InitBlock();
+ }
+ private void InitBlock()
+ {
+ similarity = Net.Search.Similarity.Default;
+ }
+
+ /// <summary>Search implementation with arbitrary sorting. Finds
+ /// the top <c>n</c> hits for <c>query</c>, applying
+ /// <c>filter</c> if non-null, and sorting the hits by the criteria in
+ /// <c>sort</c>.
+ ///
+ /// <p/>NOTE: this does not compute scores by default; use
+ /// <see cref="IndexSearcher.SetDefaultFieldSortScoring(bool,bool)" /> to enable scoring.
+ ///
+ /// </summary>
+ /// <throws> BooleanQuery.TooManyClauses </throws>
+ public virtual TopFieldDocs Search(Query query, Filter filter, int n, Sort sort)
+ {
+ return Search(CreateWeight(query), filter, n, sort);
+ }
+
+ /// <summary>Lower-level search API.
+ ///
+ /// <p/><see cref="Collector.Collect(int)" /> is called for every matching document.
+ ///
+ /// <p/>Applications should only use this if they need <i>all</i> of the matching
+ /// documents. The high-level search API (<see cref="Searcher.Search(Query, int)" />
+ /// ) is usually more efficient, as it skips non-high-scoring hits.
+ /// <p/>Note: The <c>score</c> passed to this method is a raw score.
+ /// In other words, the score will not necessarily be a float whose value is
+ /// between 0 and 1.
+ /// </summary>
+ /// <throws> BooleanQuery.TooManyClauses </throws>
+ public virtual void Search(Query query, Collector results)
+ {
+ Search(CreateWeight(query), null, results);
+ }
+
+ /// <summary>Lower-level search API.
+ ///
+ /// <p/><see cref="Collector.Collect(int)" /> is called for every matching
+ /// document.
+ /// <br/>Collector-based access to remote indexes is discouraged.
+ ///
+ /// <p/>Applications should only use this if they need <i>all</i> of the
+ /// matching documents. The high-level search API (<see cref="Searcher.Search(Query, Filter, int)" />)
+ /// is usually more efficient, as it skips
+ /// non-high-scoring hits.
+ ///
+ /// </summary>
+ /// <param name="query">to match documents
+ /// </param>
+ /// <param name="filter">if non-null, used to permit documents to be collected.
+ /// </param>
+ /// <param name="results">to receive hits
+ /// </param>
+ /// <throws> BooleanQuery.TooManyClauses </throws>
+ public virtual void Search(Query query, Filter filter, Collector results)
+ {
+ Search(CreateWeight(query), filter, results);
+ }
+
+ /// <summary>Finds the top <c>n</c>
+ /// hits for <c>query</c>, applying <c>filter</c> if non-null.
+ ///
+ /// </summary>
+ /// <throws> BooleanQuery.TooManyClauses </throws>
+ public virtual TopDocs Search(Query query, Filter filter, int n)
+ {
+ return Search(CreateWeight(query), filter, n);
+ }
+
+ /// <summary>Finds the top <c>n</c>
+ /// hits for <c>query</c>.
+ ///
+ /// </summary>
+ /// <throws> BooleanQuery.TooManyClauses </throws>
+ public virtual TopDocs Search(Query query, int n)
+ {
+ return Search(query, null, n);
+ }
+
+ /// <summary>Returns an Explanation that describes how <c>doc</c> scored against
+ /// <c>query</c>.
+ ///
+ /// <p/>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.
+ /// </summary>
+ public virtual Explanation Explain(Query query, int doc)
+ {
+ return Explain(CreateWeight(query), doc);
+ }
+
+ /// <summary>The Similarity implementation used by this searcher. </summary>
+ private Similarity similarity;
+
+ /// <summary>Expert: Gets or Sets the Similarity implementation used by this Searcher.
+ ///
+ /// </summary>
+ /// <seealso cref="Lucene.Net.Search.Similarity.Default">
+ /// </seealso>
+ public virtual Similarity Similarity
+ {
+ get { return this.similarity; }
+ set { this.similarity = value; }
+ }
+
+ /// <summary> creates a weight for <c>query</c></summary>
+ /// <returns> new weight
+ /// </returns>
+ public /*protected internal*/ virtual Weight CreateWeight(Query query)
+ {
+ return query.Weight(this);
+ }
+
+ // inherit javadoc
+ public virtual int[] DocFreqs(Term[] terms)
+ {
+ int[] result = new int[terms.Length];
+ for (int i = 0; i < terms.Length; i++)
+ {
+ result[i] = DocFreq(terms[i]);
+ }
+ return result;
+ }
+
+ public abstract void Search(Weight weight, Filter filter, Collector results);
+
+ [Obsolete("Use Dispose() instead")]
+ public void Close()
+ {
+ Dispose();
+ }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ }
+
+ protected abstract void Dispose(bool disposing);
+
+ public abstract int DocFreq(Term term);
+ public abstract int MaxDoc { get; }
+ public abstract TopDocs Search(Weight weight, Filter filter, int n);
+ public abstract Document Doc(int i);
+ public abstract Document Doc(int docid, FieldSelector fieldSelector);
+ public abstract Query Rewrite(Query query);
+ public abstract Explanation Explain(Weight weight, int doc);
+ public abstract TopFieldDocs Search(Weight weight, Filter filter, int n, Sort sort);
+ /* End patch for GCJ bug #15411. */
+ }
+} \ No newline at end of file