~evarlast/ubuntu/trusty/mongodb/upstart-workaround-debian-bug-718702

« back to all changes in this revision

Viewing changes to src/mongo/db/fts/fts_spec.h

  • Committer: Package Import Robot
  • Author(s): James Page, James Page, Robie Basak
  • Date: 2013-05-29 17:44:42 UTC
  • mfrom: (44.1.7 sid)
  • Revision ID: package-import@ubuntu.com-20130529174442-z0a4qmoww4y0t458
Tags: 1:2.4.3-1ubuntu1
[ James Page ]
* Merge from Debian unstable, remaining changes:
  - Enable SSL support:
    + d/control: Add libssl-dev to BD's.
    + d/rules: Enabled --ssl option.
    + d/mongodb.conf: Add example SSL configuration options.
  - d/mongodb-server.mongodb.upstart: Add upstart configuration.
  - d/rules: Don't strip binaries during scons build for Ubuntu.
  - d/control: Add armhf to target archs.
  - d/p/SConscript.client.patch: fixup install of client libraries.
  - d/p/0010-install-libs-to-usr-lib-not-usr-lib64-Closes-588557.patch:
    Install libraries to lib not lib64.
* Dropped changes:
  - d/p/arm-support.patch: Included in Debian.
  - d/p/double-alignment.patch: Included in Debian.
  - d/rules,control: Debian also builds with avaliable system libraries
    now.
* Fix FTBFS due to gcc and boost upgrades in saucy:
  - d/p/0008-ignore-unused-local-typedefs.patch: Add -Wno-unused-typedefs
    to unbreak building with g++-4.8.
  - d/p/0009-boost-1.53.patch: Fixup signed/unsigned casting issue.

[ Robie Basak ]
* d/p/0011-Use-a-signed-char-to-store-BSONType-enumerations.patch: Fixup
  build failure on ARM due to missing signed'ness of char cast.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// fts_spec.h
 
2
 
 
3
/**
 
4
*    Copyright (C) 2012 10gen Inc.
 
5
*
 
6
*    This program is free software: you can redistribute it and/or  modify
 
7
*    it under the terms of the GNU Affero General Public License, version 3,
 
8
*    as published by the Free Software Foundation.
 
9
*
 
10
*    This program is distributed in the hope that it will be useful,
 
11
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
*    GNU Affero General Public License for more details.
 
14
*
 
15
*    You should have received a copy of the GNU Affero General Public License
 
16
*    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
17
*/
 
18
 
 
19
#pragma once
 
20
 
 
21
#include <map>
 
22
#include <vector>
 
23
#include <string>
 
24
 
 
25
#include "mongo/db/fts/fts_util.h"
 
26
#include "mongo/db/fts/stemmer.h"
 
27
#include "mongo/db/fts/stop_words.h"
 
28
#include "mongo/db/fts/tokenizer.h"
 
29
#include "mongo/platform/unordered_map.h"
 
30
 
 
31
namespace mongo {
 
32
 
 
33
    namespace fts {
 
34
 
 
35
        extern const double MAX_WEIGHT;
 
36
 
 
37
        typedef std::map<string,double> Weights; // TODO cool map
 
38
 
 
39
        typedef unordered_map<string,double> TermFrequencyMap;
 
40
 
 
41
 
 
42
        class FTSSpec {
 
43
 
 
44
            struct Tools {
 
45
                Tools( string language )
 
46
                    : language( language ){}
 
47
                const std::string& language;
 
48
                const Stemmer* stemmer;
 
49
                const StopWords* stopwords;
 
50
            };
 
51
 
 
52
        public:
 
53
            FTSSpec( const BSONObj& indexInfo );
 
54
 
 
55
            bool wildcard() const { return _wildcard; }
 
56
            const string& defaultLanguage() const { return _defaultLanguage; }
 
57
            const string& languageOverrideField() const { return _languageOverrideField; }
 
58
 
 
59
            size_t numExtraBefore() const { return _extraBefore.size(); }
 
60
            const std::string& extraBefore( unsigned i ) const { return _extraBefore[i]; }
 
61
 
 
62
            size_t numExtraAfter() const { return _extraAfter.size(); }
 
63
            const std::string& extraAfter( unsigned i ) const { return _extraAfter[i]; }
 
64
 
 
65
            string getLanguageToUse( const BSONObj& userDoc ) const;
 
66
 
 
67
            void scoreDocument( const BSONObj& obj, TermFrequencyMap* scores ) const;
 
68
 
 
69
            /**
 
70
             * given a query, pulls out the pieces (in order) that go in the index first
 
71
             */
 
72
            Status getIndexPrefix( const BSONObj& filter, BSONObj* out ) const;
 
73
 
 
74
            const Weights& weights() const { return _weights; }
 
75
 
 
76
            /**
 
77
             * @param out - untouched if field isn't present
 
78
             * @return if field is here
 
79
             */
 
80
            bool weight( const StringData& field, double* out ) const;
 
81
 
 
82
 
 
83
            static BSONObj fixSpec( const BSONObj& spec );
 
84
        private:
 
85
            void _scoreRecurse(const Tools& tools,
 
86
                               const BSONObj& obj,
 
87
                               TermFrequencyMap* term_freqs ) const;
 
88
 
 
89
            void _scoreString( const Tools& tools,
 
90
                               const StringData& raw,
 
91
                               TermFrequencyMap* term_freqs,
 
92
                               double weight ) const;
 
93
 
 
94
            string _defaultLanguage;
 
95
            string _languageOverrideField;
 
96
            bool _wildcard;
 
97
 
 
98
            // _weights stores a mapping between the fields and the value as a double
 
99
            // basically, how much should an occurence of (query term) in (field) be worth
 
100
            Weights _weights;
 
101
 
 
102
            // other fields to index
 
103
            std::vector<string> _extraBefore;
 
104
            std::vector<string> _extraAfter;
 
105
        };
 
106
 
 
107
    }
 
108
}