Searchable.cs
上传用户:zhangkuixh
上传日期:2013-09-30
资源大小:5473k
文件大小:7k
源码类别:

搜索引擎

开发平台:

C#

  1. /*
  2.  * Copyright 2004 The Apache Software Foundation
  3.  * 
  4.  * Licensed under the Apache License, Version 2.0 (the "License");
  5.  * you may not use this file except in compliance with the License.
  6.  * You may obtain a copy of the License at
  7.  * 
  8.  * http://www.apache.org/licenses/LICENSE-2.0
  9.  * 
  10.  * Unless required by applicable law or agreed to in writing, software
  11.  * distributed under the License is distributed on an "AS IS" BASIS,
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13.  * See the License for the specific language governing permissions and
  14.  * limitations under the License.
  15.  */
  16. using System;
  17. using Document = Lucene.Net.Documents.Document;
  18. using IndexReader = Lucene.Net.Index.IndexReader;
  19. using Term = Lucene.Net.Index.Term;
  20. namespace Lucene.Net.Search
  21. {
  22. /// <summary>The interface for search implementations.
  23. /// 
  24. /// <p>Searchable is the abstract network protocol for searching. 
  25. /// Implementations provide search over a single index, over multiple
  26. /// indices, and over indices on remote servers.
  27. /// 
  28. /// <p>Queries, filters and sort criteria are designed to be compact so that
  29. /// they may be efficiently passed to a remote index, with only the top-scoring
  30. /// hits being returned, rather than every non-zero scoring hit.
  31. /// </summary>
  32.     public interface Searchable
  33.     {
  34.         /// <summary>Lower-level search API.
  35.         /// 
  36.         /// <p>{@link HitCollector#Collect(int,float)} is called for every non-zero
  37.         /// scoring document.
  38.         /// <br>HitCollector-based access to remote indexes is discouraged.
  39.         /// 
  40.         /// <p>Applications should only use this if they need <i>all</i> of the
  41.         /// matching documents.  The high-level search API ({@link
  42.         /// Searcher#Search(Query)}) is usually more efficient, as it skips
  43.         /// non-high-scoring hits.
  44.         /// 
  45.         /// </summary>
  46.         /// <param name="query">to match documents
  47.         /// </param>
  48.         /// <param name="filter">if non-null, a bitset used to eliminate some documents
  49.         /// </param>
  50.         /// <param name="results">to receive hits
  51.         /// </param>
  52.         /// <throws>  BooleanQuery.TooManyClauses </throws>
  53.         /// <summary> 
  54.         /// </summary>
  55.         /// <deprecated>
  56.         /// </deprecated>
  57.         void  Search(Query query, Filter filter, HitCollector results);
  58.         /// <summary>Expert: Low-level search implementation.
  59.         /// Identical to {@link #Search(Query, Filter, HitCollector)}, but takes
  60.         /// a Weight instead of a query.
  61.         /// </summary>
  62.         void  Search(Weight weight, Filter filter, HitCollector results);
  63.         /// <summary>Frees resources associated with this Searcher.
  64.         /// Be careful not to call this method while you are still using objects
  65.         /// like {@link Hits}.
  66.         /// </summary>
  67.         void  Close();
  68.         /// <summary>Expert: Returns the number of documents containing <code>term</code>.
  69.         /// Called by search code to compute term weights.
  70.         /// </summary>
  71.         /// <seealso cref="IndexReader#docFreq(Term)">
  72.         /// </seealso>
  73.         int DocFreq(Term term);
  74.         /// <summary>Expert: For each term in the terms array, calculates the number of
  75.         /// documents containing <code>term</code>. Returns an array with these
  76.         /// document frequencies. Used to minimize number of remote calls.
  77.         /// </summary>
  78.         int[] DocFreqs(Term[] terms);
  79.         /// <summary>Expert: Returns one greater than the largest possible document number.
  80.         /// Called by search code to compute term weights.
  81.         /// </summary>
  82.         /// <seealso cref="IndexReader#maxDoc()">
  83.         /// </seealso>
  84.         int MaxDoc();
  85.         /// <summary>Expert: Low-level search implementation.  Finds the top <code>n</code>
  86.         /// hits for <code>query</code>, applying <code>filter</code> if non-null.
  87.         /// 
  88.         /// <p>Called by {@link Hits}.
  89.         /// 
  90.         /// <p>Applications should usually call {@link Searcher#Search(Query)} or
  91.         /// {@link Searcher#Search(Query,Filter)} instead.
  92.         /// </summary>
  93.         /// <throws>  BooleanQuery.TooManyClauses </throws>
  94.         /// <summary> 
  95.         /// </summary>
  96.         /// <deprecated>
  97.         /// </deprecated>
  98.         TopDocs Search(Query query, Filter filter, int n);
  99.         /// <summary>Expert: Low-level search implementation.
  100.         /// Identical to {@link #Search(Query, Filter, int)}, but takes
  101.         /// a Weight instead of a query.
  102.         /// </summary>
  103.         TopDocs Search(Weight weight, Filter filter, int n);
  104.         /// <summary>Expert: Returns the stored fields of document <code>i</code>.
  105.         /// Called by {@link HitCollector} implementations.
  106.         /// </summary>
  107.         /// <seealso cref="IndexReader#document(int)">
  108.         /// </seealso>
  109.         Document Doc(int i);
  110.         /// <summary>Expert: called to re-write queries into primitive queries.</summary>
  111.         /// <throws>  BooleanQuery.TooManyClauses </throws>
  112.         Query Rewrite(Query query);
  113.         /// <summary>Returns an Explanation that describes how <code>doc</code> scored against
  114.         /// <code>query</code>.
  115.         /// 
  116.         /// <p>This is intended to be used in developing Similarity implementations,
  117.         /// and, for good performance, should not be displayed with every hit.
  118.         /// Computing an explanation is as expensive as executing the query over the
  119.         /// entire index.
  120.         /// </summary>
  121.         /// <throws>  BooleanQuery.TooManyClauses </throws>
  122.         Explanation Explain(Query query, int doc);
  123.         /// <summary> Identical to {@link #Search(Query, Filter, HitCollector)}, but takes
  124.         /// a Weight instead of a query.
  125.         /// </summary>
  126.         Explanation Explain(Weight weight, int doc);
  127.         /// <summary>Expert: Low-level search implementation with arbitrary sorting.  Finds
  128.         /// the top <code>n</code> hits for <code>query</code>, applying
  129.         /// <code>filter</code> if non-null, and sorting the hits by the criteria in
  130.         /// <code>sort</code>.
  131.         /// 
  132.         /// <p>Applications should usually call {@link
  133.         /// Searcher#Search(Query,Filter,Sort)} instead.
  134.         /// </summary>
  135.         /// <throws>  BooleanQuery.TooManyClauses </throws>
  136.         /// <summary> 
  137.         /// </summary>
  138.         /// <deprecated>
  139.         /// </deprecated>
  140.         TopFieldDocs Search(Query query, Filter filter, int n, Sort sort);
  141.         /// <summary>Expert: Low-level search implementation.
  142.         /// Identical to {@link #Search(Query, Filter, int, Sort)}, but takes
  143.         /// a Weight instead of a query.
  144.         /// </summary>
  145.         TopFieldDocs Search(Weight weight, Filter filter, int n, Sort sort);
  146.     }
  147. }