/*------------------------------------------------------------------------------ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team * * Distributable under the terms of either the Apache License (Version 2.0) or * the GNU Lesser General Public License, as specified in the COPYING file. ------------------------------------------------------------------------------*/ #ifndef _lucene_search_SearchHeader_ #define _lucene_search_SearchHeader_ //#include "CLucene/index/IndexReader.h" CL_CLASS_DEF(index,Term) CL_CLASS_DEF(index,IndexReader) //#include "Filter.h" CL_CLASS_DEF(document,Document) CL_CLASS_DEF(util,Comparable) //#include "Sort.h" //#include "CLucene/util/VoidList.h" //#include "Explanation.h" //#include "Similarity.h" CL_NS_DEF(search) class Query; class Scorer; class Explanation; class Hits; class Sort; class FieldDoc; class TopFieldDocs; /** Expert: Returned by low-level search implementations. * @see TopDocs */ struct CLUCENE_EXPORT ScoreDoc { /** Expert: A hit document's number. * @see Searcher#doc(int32_t) */ int32_t doc; /** Expert: The score of this document for the query. */ float_t score; }; /** Expert: Returned by low-level search implementations. * @see Searcher#search(Query,Filter,int32_t) */ class CLUCENE_EXPORT TopDocs:LUCENE_BASE { public: /** Expert: The total number of hits for the query. * @see Hits#length() */ int32_t totalHits; /** Expert: The top hits for the query. */ ScoreDoc* scoreDocs; int32_t scoreDocsLength; /** Expert: Constructs a TopDocs. TopDocs takes ownership of the ScoreDoc array*/ TopDocs(const int32_t th, ScoreDoc* sds, int32_t scoreDocsLength); virtual ~TopDocs(); private: /** Expert: Stores the maximum score value encountered, needed for normalizing. */ //float_t maxScore; }; /** Lower-level search API. *
HitCollectors are primarily meant to be used to implement queries, * sorting and filtering. * @see Searcher#search(Query,HitCollector) */ class CLUCENE_EXPORT HitCollector: LUCENE_BASE { public: /** Called once for every non-zero scoring document, with the document number * and its score. * *

If, for example, an application wished to collect all of the hits for a * query in a BitSet, then it might:

      *   Searcher searcher = new IndexSearcher(indexReader);
      *   final BitSet bits = new BitSet(indexReader.maxDoc());
      *   searcher.search(query, new HitCollector() {
      *       public void collect(int32_t doc, float score) {
      *         bits.set(doc);
      *       }
      *     });
      * 
* *

Note: This is called in an inner search loop. For good search * performance, implementations of this method should not call * {@link Searcher#doc(int32_t)} or * {@link IndexReader#document(int32_t)} on every * document number encountered. Doing so can slow searches by an order * of magnitude or more. *

Note: The score 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. */ virtual void collect(const int32_t doc, const float_t score) = 0; virtual ~HitCollector(){} }; /** Expert: Calculate query weights and build query scorers. * *

A Weight is constructed by a query, given a Searcher ({@link * Query#_createWeight(Searcher)}). The {@link #sumOfSquaredWeights()} method * is then called on the top-level query to compute the query normalization * factor (@link Similarity#queryNorm(float_t)}). This factor is then passed to * {@link #normalize(float_t)}. At this point the weighting is complete and a * scorer may be constructed by calling {@link #scorer(IndexReader)}. */ class CLUCENE_EXPORT Weight { public: virtual ~Weight(); /** The query that this concerns. */ virtual Query* getQuery() = 0; /** The weight for this query. */ virtual float_t getValue() = 0; /** The sum of squared weights of contained query clauses. */ virtual float_t sumOfSquaredWeights() = 0; /** Assigns the query normalization factor to this. */ virtual void normalize(float_t norm) = 0; /** Constructs a scorer for this. */ virtual Scorer* scorer(CL_NS(index)::IndexReader* reader) = 0; /** An explanation of the score computation for the named document. */ virtual Explanation* explain(CL_NS(index)::IndexReader* reader, int32_t doc) = 0; virtual TCHAR* toString(); }; class CLUCENE_EXPORT HitDoc { public: float_t score; int32_t id; CL_NS(document)::Document* doc; HitDoc* next; // in doubly-linked cache HitDoc* prev; // in doubly-linked cache HitDoc(const float_t s, const int32_t i); virtual ~HitDoc(); }; CL_NS_END #endif