summaryrefslogtreecommitdiff
path: root/src/mongo/db/exec/text.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/exec/text.h')
-rw-r--r--src/mongo/db/exec/text.h222
1 files changed, 112 insertions, 110 deletions
diff --git a/src/mongo/db/exec/text.h b/src/mongo/db/exec/text.h
index 764abf41002..07fd2323dc1 100644
--- a/src/mongo/db/exec/text.h
+++ b/src/mongo/db/exec/text.h
@@ -46,151 +46,153 @@
namespace mongo {
- using fts::FTSIndexFormat;
- using fts::FTSMatcher;
- using fts::FTSQuery;
- using fts::FTSSpec;
- using fts::MAX_WEIGHT;
+using fts::FTSIndexFormat;
+using fts::FTSMatcher;
+using fts::FTSQuery;
+using fts::FTSSpec;
+using fts::MAX_WEIGHT;
- class OperationContext;
+class OperationContext;
- struct TextStageParams {
- TextStageParams(const FTSSpec& s) : spec(s) {}
+struct TextStageParams {
+ TextStageParams(const FTSSpec& s) : spec(s) {}
- // Text index descriptor. IndexCatalog owns this.
- IndexDescriptor* index;
+ // Text index descriptor. IndexCatalog owns this.
+ IndexDescriptor* index;
- // Index spec.
- FTSSpec spec;
+ // Index spec.
+ FTSSpec spec;
- // Index keys that precede the "text" index key.
- BSONObj indexPrefix;
+ // Index keys that precede the "text" index key.
+ BSONObj indexPrefix;
- // The text query.
- FTSQuery query;
- };
+ // The text query.
+ FTSQuery query;
+};
+/**
+ * Implements a blocking stage that returns text search results.
+ *
+ * Prerequisites: None; is a leaf node.
+ * Output type: LOC_AND_OBJ_UNOWNED.
+ *
+ * TODO: Should the TextStage ever generate NEED_FETCH requests? Right now this stage could
+ * reduce concurrency by failing to request a yield during fetch.
+ */
+class TextStage : public PlanStage {
+public:
/**
- * Implements a blocking stage that returns text search results.
- *
- * Prerequisites: None; is a leaf node.
- * Output type: LOC_AND_OBJ_UNOWNED.
- *
- * TODO: Should the TextStage ever generate NEED_FETCH requests? Right now this stage could
- * reduce concurrency by failing to request a yield during fetch.
+ * The text stage has a few 'states' it transitions between.
*/
- class TextStage : public PlanStage {
- public:
- /**
- * The text stage has a few 'states' it transitions between.
- */
- enum State {
- // 1. Initialize the index scans we use to retrieve term/score info.
- INIT_SCANS,
-
- // 2. Read the terms/scores from the text index.
- READING_TERMS,
+ enum State {
+ // 1. Initialize the index scans we use to retrieve term/score info.
+ INIT_SCANS,
- // 3. Return results to our parent.
- RETURNING_RESULTS,
+ // 2. Read the terms/scores from the text index.
+ READING_TERMS,
- // 4. Done.
- DONE,
- };
+ // 3. Return results to our parent.
+ RETURNING_RESULTS,
- TextStage(OperationContext* txn,
- const TextStageParams& params,
- WorkingSet* ws,
- const MatchExpression* filter);
+ // 4. Done.
+ DONE,
+ };
- virtual ~TextStage();
+ TextStage(OperationContext* txn,
+ const TextStageParams& params,
+ WorkingSet* ws,
+ const MatchExpression* filter);
- virtual StageState work(WorkingSetID* out);
- virtual bool isEOF();
+ virtual ~TextStage();
- virtual void saveState();
- virtual void restoreState(OperationContext* opCtx);
- virtual void invalidate(OperationContext* txn, const RecordId& dl, InvalidationType type);
+ virtual StageState work(WorkingSetID* out);
+ virtual bool isEOF();
- virtual std::vector<PlanStage*> getChildren() const;
+ virtual void saveState();
+ virtual void restoreState(OperationContext* opCtx);
+ virtual void invalidate(OperationContext* txn, const RecordId& dl, InvalidationType type);
- virtual StageType stageType() const { return STAGE_TEXT; }
+ virtual std::vector<PlanStage*> getChildren() const;
- PlanStageStats* getStats();
+ virtual StageType stageType() const {
+ return STAGE_TEXT;
+ }
- virtual const CommonStats* getCommonStats();
+ PlanStageStats* getStats();
- virtual const SpecificStats* getSpecificStats();
+ virtual const CommonStats* getCommonStats();
- static const char* kStageType;
+ virtual const SpecificStats* getSpecificStats();
- private:
- /**
- * Initializes sub-scanners.
- */
- StageState initScans(WorkingSetID* out);
+ static const char* kStageType;
- /**
- * Helper for buffering results array. Returns NEED_TIME (if any results were produced),
- * IS_EOF, or FAILURE.
- */
- StageState readFromSubScanners(WorkingSetID* out);
+private:
+ /**
+ * Initializes sub-scanners.
+ */
+ StageState initScans(WorkingSetID* out);
- /**
- * Helper called from readFromSubScanners to update aggregate score with a new-found (term,
- * score) pair for this document. Also rejects documents that don't match this stage's
- * filter.
- */
- void addTerm(const BSONObj key, WorkingSetID wsid);
+ /**
+ * Helper for buffering results array. Returns NEED_TIME (if any results were produced),
+ * IS_EOF, or FAILURE.
+ */
+ StageState readFromSubScanners(WorkingSetID* out);
- /**
- * Possibly return a result. FYI, this may perform a fetch directly if it is needed to
- * evaluate all filters.
- */
- StageState returnResults(WorkingSetID* out);
+ /**
+ * Helper called from readFromSubScanners to update aggregate score with a new-found (term,
+ * score) pair for this document. Also rejects documents that don't match this stage's
+ * filter.
+ */
+ void addTerm(const BSONObj key, WorkingSetID wsid);
- // transactional context for read locks. Not owned by us
- OperationContext* _txn;
+ /**
+ * Possibly return a result. FYI, this may perform a fetch directly if it is needed to
+ * evaluate all filters.
+ */
+ StageState returnResults(WorkingSetID* out);
- // Parameters of this text stage.
- TextStageParams _params;
+ // transactional context for read locks. Not owned by us
+ OperationContext* _txn;
- // Text-specific phrase and negated term matcher.
- FTSMatcher _ftsMatcher;
+ // Parameters of this text stage.
+ TextStageParams _params;
- // Working set. Not owned by us.
- WorkingSet* _ws;
+ // Text-specific phrase and negated term matcher.
+ FTSMatcher _ftsMatcher;
- // Filter. Not owned by us.
- const MatchExpression* _filter;
+ // Working set. Not owned by us.
+ WorkingSet* _ws;
- // Stats.
- CommonStats _commonStats;
- TextStats _specificStats;
+ // Filter. Not owned by us.
+ const MatchExpression* _filter;
- // What state are we in? See the State enum above.
- State _internalState;
+ // Stats.
+ CommonStats _commonStats;
+ TextStats _specificStats;
- // Used in INIT_SCANS and READING_TERMS. The index scans we're using to retrieve text
- // terms.
- OwnedPointerVector<PlanStage> _scanners;
+ // What state are we in? See the State enum above.
+ State _internalState;
- // Which _scanners are we currently reading from?
- size_t _currentIndexScanner;
+ // Used in INIT_SCANS and READING_TERMS. The index scans we're using to retrieve text
+ // terms.
+ OwnedPointerVector<PlanStage> _scanners;
- // Map each buffered record id to this data.
- struct TextRecordData {
- TextRecordData() : wsid(WorkingSet::INVALID_ID), score(0.0) { }
- WorkingSetID wsid;
- double score;
- };
+ // Which _scanners are we currently reading from?
+ size_t _currentIndexScanner;
- // Temporary score data filled out by sub-scans. Used in READING_TERMS and
- // RETURNING_RESULTS.
- // Maps from diskloc -> (aggregate score for doc, wsid).
- typedef unordered_map<RecordId, TextRecordData, RecordId::Hasher> ScoreMap;
- ScoreMap _scores;
- ScoreMap::const_iterator _scoreIterator;
+ // Map each buffered record id to this data.
+ struct TextRecordData {
+ TextRecordData() : wsid(WorkingSet::INVALID_ID), score(0.0) {}
+ WorkingSetID wsid;
+ double score;
};
-} // namespace mongo
+ // Temporary score data filled out by sub-scans. Used in READING_TERMS and
+ // RETURNING_RESULTS.
+ // Maps from diskloc -> (aggregate score for doc, wsid).
+ typedef unordered_map<RecordId, TextRecordData, RecordId::Hasher> ScoreMap;
+ ScoreMap _scores;
+ ScoreMap::const_iterator _scoreIterator;
+};
+
+} // namespace mongo