diff options
author | Eliot Horowitz <eliot@10gen.com> | 2012-12-25 12:08:28 -0500 |
---|---|---|
committer | Eliot Horowitz <eliot@10gen.com> | 2012-12-25 12:25:45 -0500 |
commit | f201972ecc87f099777e1c61f269998f4399caf4 (patch) | |
tree | e23f1743cf486acbef64bd825b00bd82bb573d95 /src/mongo/db/fts/fts_matcher.h | |
parent | d2df300721805ace411b5d1a87cb4bf6d8a51ff3 (diff) | |
download | mongo-f201972ecc87f099777e1c61f269998f4399caf4.tar.gz |
SERVER-380: Experimental text search indexing
Diffstat (limited to 'src/mongo/db/fts/fts_matcher.h')
-rw-r--r-- | src/mongo/db/fts/fts_matcher.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/mongo/db/fts/fts_matcher.h b/src/mongo/db/fts/fts_matcher.h new file mode 100644 index 00000000000..c5478d63b78 --- /dev/null +++ b/src/mongo/db/fts/fts_matcher.h @@ -0,0 +1,67 @@ +// fts_matcher.h + +/** +* Copyright (C) 2012 10gen Inc. +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License, version 3, +* as published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#pragma once + +#include "mongo/db/fts/fts_query.h" +#include "mongo/db/fts/fts_spec.h" +#include "mongo/db/fts/tokenizer.h" + +namespace mongo { + + namespace fts { + + class FTSMatcher { + public: + FTSMatcher( const FTSQuery& query, const FTSSpec& spec ); + + /** + * @return true if obj has a negated term + */ + bool hasNegativeTerm(const BSONObj& obj ) const; + + /** + * @return true if obj is ok by all phrases + * so all full phrases and no negated + */ + bool phrasesMatch( const BSONObj& obj ) const; + + bool phraseMatch( const string& phrase, const BSONObj& obj ) const; + + bool matchesNonTerm( const BSONObj& obj ) const { + return !hasNegativeTerm( obj ) && phrasesMatch( obj ); + } + + private: + bool _hasNegativeTerm_recurse(const BSONObj& obj ) const; + + /** + * @return true if raw has a negated term + */ + bool _hasNegativeTerm_string( const string& raw ) const; + + bool _phraseRecurse( const string& phrase, const BSONObj& obj ) const; + bool _phraseMatches( const string& phrase, const string& haystack ) const; + + FTSQuery _query; + FTSSpec _spec; + Stemmer _stemmer; + }; + + } +} |