blob: 161715b914706169ac152721d6ba5136490b540d [file] [log] [blame]
/*------------------------------------------------------------------------------
* 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_Scorer_
#define _lucene_search_Scorer_
#if defined(_LUCENE_PRAGMA_ONCE)
# pragma once
#endif
#include "Similarity.h"
#include "SearchHeader.h"
#include "Explanation.h"
CL_NS_DEF(search)
/** Expert: Implements scoring for a class of queries. */
class Scorer: LUCENE_BASE {
private:
Similarity* similarity;
protected:
/** Constructs a Scorer. */
Scorer(Similarity* similarity) {
this->similarity = similarity;
}
public:
virtual ~Scorer(){
}
/** Returns the Similarity implementation used by this scorer. */
Similarity* getSimilarity() const{
return this->similarity;
}
/** Scores all documents and passes them to a collector. */
void score(HitCollector* hc) {
while (next()) {
hc->collect(doc(), score());
}
}
/** Advance to the next document matching the query. Returns true iff there
* is another match. */
virtual bool next() = 0;
/** Returns the current document number. Initially invalid, until {@link
* #next()} is called the first time. */
virtual int32_t doc() const = 0;
/** Returns the score of the current document. Initially invalid, until
* {@link #next()} is called the first time. */
virtual qreal score() = 0;
/** Skips to the first match beyond the current whose document number is
* greater than or equal to <i>target</i>. <p>Returns true iff there is such
* a match. <p>Behaves as if written: <pre>
* boolean skipTo(int32_t target) {
* do {
* if (!next())
* return false;
* } while (target > doc());
* return true;
* }
* </pre>
* Most implementations are considerably more efficient than that.
*/
virtual bool skipTo(int32_t target) = 0;
/** Returns an explanation of the score for <code>doc</code>. */
virtual void explain(int32_t doc, Explanation* ret) = 0;
/** Returns an string which explains the object */
virtual TCHAR* toString() = 0;
};
CL_NS_END
#endif