summaryrefslogtreecommitdiff
path: root/src/mongo/db/fts/fts_matcher.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/fts/fts_matcher.cpp')
-rw-r--r--src/mongo/db/fts/fts_matcher.cpp31
1 files changed, 14 insertions, 17 deletions
diff --git a/src/mongo/db/fts/fts_matcher.cpp b/src/mongo/db/fts/fts_matcher.cpp
index 492dbdf7b7b..634bcf345cd 100644
--- a/src/mongo/db/fts/fts_matcher.cpp
+++ b/src/mongo/db/fts/fts_matcher.cpp
@@ -31,6 +31,7 @@
#include "mongo/platform/basic.h"
#include "mongo/db/fts/fts_matcher.h"
+#include "mongo/db/fts/fts_tokenizer.h"
#include "mongo/db/fts/fts_element_iterator.h"
#include "mongo/platform/strcasestr.h"
@@ -96,15 +97,13 @@ namespace mongo {
bool FTSMatcher::_hasPositiveTerm_string( const FTSLanguage* language,
const string& raw ) const {
- Tokenizer i( *language, raw );
- Stemmer stemmer( *language );
- while ( i.more() ) {
- Token t = i.next();
- if ( t.type != Token::TEXT ) {
- continue;
- }
- string word = stemmer.stem( _query.normalizeString( t.data ) );
- if ( _query.getPositiveTerms().count( word ) > 0 ) {
+ std::unique_ptr<FTSTokenizer> tokenizer(language->createTokenizer());
+
+ tokenizer->reset(raw.c_str(), _query.getCaseSensitive());
+
+ while (tokenizer->moveNext()) {
+ string word = tokenizer->get().toString();
+ if (_query.getPositiveTerms().count(word) > 0) {
return true;
}
}
@@ -130,14 +129,12 @@ namespace mongo {
bool FTSMatcher::_hasNegativeTerm_string( const FTSLanguage* language,
const string& raw ) const {
- Tokenizer i( *language, raw );
- Stemmer stemmer( *language );
- while ( i.more() ) {
- Token t = i.next();
- if ( t.type != Token::TEXT ) {
- continue;
- }
- string word = stemmer.stem( _query.normalizeString( t.data ) );
+ std::unique_ptr<FTSTokenizer> tokenizer(language->createTokenizer());
+
+ tokenizer->reset(raw.c_str(), _query.getCaseSensitive());
+
+ while (tokenizer->moveNext()) {
+ string word = tokenizer->get().toString();
if ( _query.getNegatedTerms().count( word ) > 0 ) {
return true;
}