From: <ust...@us...> - 2006-11-20 12:35:00
|
Revision: 2390 http://svn.sourceforge.net/clucene/?rev=2390&view=rev Author: ustramooner Date: 2006-11-20 04:34:56 -0800 (Mon, 20 Nov 2006) Log Message: ----------- moved collector implementations into the code file Modified Paths: -------------- trunk/src/CLucene/search/IndexSearcher.cpp trunk/src/CLucene/search/IndexSearcher.h Modified: trunk/src/CLucene/search/IndexSearcher.cpp =================================================================== --- trunk/src/CLucene/search/IndexSearcher.cpp 2006-11-20 12:29:24 UTC (rev 2389) +++ trunk/src/CLucene/search/IndexSearcher.cpp 2006-11-20 12:34:56 UTC (rev 2390) @@ -23,64 +23,85 @@ CL_NS_DEF(search) + class SimpleTopDocsCollector:public HitCollector{ + private: + float_t minScore; + const CL_NS(util)::BitSet* bits; + HitQueue* hq; + size_t nDocs; + int32_t* totalHits; + public: + SimpleTopDocsCollector(const CL_NS(util)::BitSet* bs, HitQueue* hitQueue, int32_t* totalhits, size_t ndocs, const float_t ms=-1.0f): + minScore(ms), + bits(bs), + hq(hitQueue), + nDocs(ndocs), + totalHits(totalhits) + { + } + ~SimpleTopDocsCollector(){} + void collect(const int32_t doc, const float_t score){ + if (score > 0.0f && // ignore zeroed buckets + (bits==NULL || bits->get(doc))) { // skip docs not in bits + ++totalHits[0]; + if (hq->size() < nDocs || (minScore==-1.0f || score >= minScore)) { + ScoreDoc sd = {doc, score}; + hq->insert(sd); // update hit queue + if ( minScore != -1.0f ) + minScore = hq->top().score; // maintain minScore + } + } + } + }; - SimpleTopDocsCollector::SimpleTopDocsCollector(const CL_NS(util)::BitSet* bs, HitQueue* hitQueue, int32_t* totalhits, size_t ndocs, const float_t ms): - minScore(ms), - bits(bs), - hq(hitQueue), - nDocs(ndocs), - totalHits(totalhits) - { - } - SimpleTopDocsCollector::~SimpleTopDocsCollector(){ - } - void SimpleTopDocsCollector::collect(const int32_t doc, const float_t score){ - if (score > 0.0f && // ignore zeroed buckets - (bits==NULL || bits->get(doc))) { // skip docs not in bits - ++totalHits[0]; - if (hq->size() < nDocs || (minScore==-1.0f || score >= minScore)) { - ScoreDoc sd = {doc, score}; - hq->insert(sd); // update hit queue - if ( minScore != -1.0f ) - minScore = hq->top().score; // maintain minScore - } + class SortedTopDocsCollector:public HitCollector{ + private: + const CL_NS(util)::BitSet* bits; + FieldSortedHitQueue* hq; + size_t nDocs; + int32_t* totalHits; + public: + SortedTopDocsCollector(const CL_NS(util)::BitSet* bs, FieldSortedHitQueue* hitQueue, int32_t* totalhits, size_t _nDocs): + bits(bs), + hq(hitQueue), + nDocs(_nDocs), + totalHits(totalhits) + { + } + ~SortedTopDocsCollector(){ } - } + void collect(const int32_t doc, const float_t score){ + if (score > 0.0f && // ignore zeroed buckets + (bits==NULL || bits->get(doc))) { // skip docs not in bits + ++totalHits[0]; + FieldDoc* fd = _CLNEW FieldDoc(doc, score); //todo: see jlucene way... with fields def??? + if ( !hq->insert(fd) ) // update hit queue + _CLDELETE(fd); + } + } + }; - - SortedTopDocsCollector::SortedTopDocsCollector(const CL_NS(util)::BitSet* bs, FieldSortedHitQueue* hitQueue, int32_t* totalhits,const size_t ndocs): - bits(bs), - hq(hitQueue), - nDocs(ndocs), - totalHits(totalhits) - { - } - SortedTopDocsCollector::~SortedTopDocsCollector(){ - } - void SortedTopDocsCollector::collect(const int32_t doc, const float_t score){ - if (score > 0.0f && // ignore zeroed buckets - (bits==NULL || bits->get(doc))) { // skip docs not in bits - ++totalHits[0]; - FieldDoc* fd = _CLNEW FieldDoc(doc, score); //todo: see jlucene way... with fields def??? - if ( !hq->insert(fd) ) // update hit queue - _CLDELETE(fd); + class SimpleFilteredCollector: public HitCollector{ + private: + CL_NS(util)::BitSet* bits; + HitCollector* results; + public: + SimpleFilteredCollector(CL_NS(util)::BitSet* bs, HitCollector* collector): + bits(bs), + results(collector) + { + } + ~SimpleFilteredCollector(){ } - } + protected: + void collect(const int32_t doc, const float_t score){ + if (bits->get(doc)) { // skip docs not in bits + results->collect(doc, score); + } + } + }; - SimpleFilteredCollector::SimpleFilteredCollector(BitSet* bs, HitCollector* collector): - bits(bs), - results(collector) - { - } - SimpleFilteredCollector::~SimpleFilteredCollector(){ - } - void SimpleFilteredCollector::collect(const int32_t doc, const float_t score) { - if (bits->get(doc)) { // skip docs not in bits - results->collect(doc, score); - } - } - IndexSearcher::IndexSearcher(const char* path){ //Func - Constructor // Creates a searcher searching the index in the named directory. */ Modified: trunk/src/CLucene/search/IndexSearcher.h =================================================================== --- trunk/src/CLucene/search/IndexSearcher.h 2006-11-20 12:29:24 UTC (rev 2389) +++ trunk/src/CLucene/search/IndexSearcher.h 2006-11-20 12:34:56 UTC (rev 2390) @@ -21,86 +21,47 @@ #include "FieldSortedHitQueue.h" CL_NS_DEF(search) - -#ifndef LUCENE_HIDE_INTERNAL - class SimpleTopDocsCollector:public HitCollector{ - private: - float_t minScore; - const CL_NS(util)::BitSet* bits; - HitQueue* hq; - size_t nDocs; - int32_t* totalHits; - public: - SimpleTopDocsCollector(const CL_NS(util)::BitSet* bs, HitQueue* hitQueue, int32_t* totalhits, size_t ndocs, const float_t minScore=-1.0f); - ~SimpleTopDocsCollector(); - void collect(const int32_t doc, const float_t score); - }; +/** Implements search over a single IndexReader. +* +* <p>Applications usually need only call the inherited {@link #search(Query)} +* or {@link #search(Query,Filter)} methods. +*/ +class IndexSearcher:public Searcher{ + CL_NS(index)::IndexReader* reader; + bool readerOwner; - class SortedTopDocsCollector:public HitCollector{ - private: - const CL_NS(util)::BitSet* bits; - FieldSortedHitQueue* hq; - size_t nDocs; - int32_t* totalHits; - public: - SortedTopDocsCollector(const CL_NS(util)::BitSet* bs, FieldSortedHitQueue* hitQueue, int32_t* totalhits, size_t ndocs); - ~SortedTopDocsCollector(); - void collect(const int32_t doc, const float_t score); - }; +public: + /// Creates a searcher searching the index in the named directory. + IndexSearcher(const char* path); + + /// Creates a searcher searching the index in the specified directory. + IndexSearcher(CL_NS(store)::Directory* directory); - class SimpleFilteredCollector: public HitCollector{ - private: - CL_NS(util)::BitSet* bits; - HitCollector* results; - public: - SimpleFilteredCollector(CL_NS(util)::BitSet* bs, HitCollector* collector); - ~SimpleFilteredCollector(); - protected: - void collect(const int32_t doc, const float_t score); - }; -#endif //LUCENE_HIDE_INTERNAL + /// Creates a searcher searching the provided index. + IndexSearcher(CL_NS(index)::IndexReader* r); - /** Implements search over a single IndexReader. - * - * <p>Applications usually need only call the inherited {@link #search(Query)} - * or {@link #search(Query,Filter)} methods. - */ - class IndexSearcher:public Searcher{ - CL_NS(index)::IndexReader* reader; - bool readerOwner; + ~IndexSearcher(); + + /// Frees resources associated with this Searcher. + void close(); - public: - // Creates a searcher searching the index in the named directory. - IndexSearcher(const char* path); - - // Creates a searcher searching the index in the specified directory. - IndexSearcher(CL_NS(store)::Directory* directory); + int32_t docFreq(const CL_NS(index)::Term* term) const; - // Creates a searcher searching the provided index. - IndexSearcher(CL_NS(index)::IndexReader* r); + CL_NS(document)::Document* doc(const int32_t i); - ~IndexSearcher(); - - // Frees resources associated with this Searcher. - void close(); + int32_t maxDoc() const; - int32_t docFreq(const CL_NS(index)::Term* term) const; - - CL_NS(document)::Document* doc(const int32_t i); + TopDocs* _search(Query* query, Filter* filter, const int32_t nDocs); + TopFieldDocs* _search(Query* query, Filter* filter, const int32_t nDocs, const Sort* sort); - int32_t maxDoc() const; + void _search(Query* query, Filter* filter, HitCollector* results); - TopDocs* _search(Query* query, Filter* filter, const int32_t nDocs); - TopFieldDocs* _search(Query* query, Filter* filter, const int32_t nDocs, const Sort* sort); + CL_NS(index)::IndexReader* getReader(){ + return reader; + } - void _search(Query* query, Filter* filter, HitCollector* results); - - CL_NS(index)::IndexReader* getReader(){ - return reader; - } - - Query* rewrite(Query* original); - Explanation* explain(Query* query, int32_t doc); - }; + Query* rewrite(Query* original); + Explanation* explain(Query* query, int32_t doc); +}; CL_NS_END #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |