29
29
using namespace Columbus;
31
31
static const QRegularExpression SINGLE_AMPERSAND("(?<![&])[&](?![&])");
32
static const QRegularExpression BAD_CHARACTERS("\\.\\.\\.|…");
32
33
static const QRegularExpression WHITESPACE("\\s+");
33
34
static const QRegularExpression WHITESPACE_OR_SEMICOLON("[;\\s+]");
39
40
ErrorValues &errorValues(m_matcher.getErrorValues());
40
41
errorValues.addStandardErrors();
42
connect(m_settings.data(), SIGNAL(changed()), this,
43
SLOT(settingChanged()));
43
m_matcher.getIndexWeights().setWeight(Word("context"), 0.5);
45
connect(m_settings.data(), SIGNAL(changed()), this, SLOT(settingChanged()));
91
95
for (const QString &word : text) {
92
command.addWord(Word(word.toStdString()));
96
command.addWord(Word(word.toUtf8().constData()));
94
98
document.addText(Word("command"), command);
104
108
for (const QString &word : context) {
105
wordList.addWord(Word(word.toStdString()));
109
wordList.addWord(Word(word.toUtf8().constData()));
107
111
document.addText(Word("context"), wordList);
153
void ItemStore::search(const QString &query, QList<Result> &results) {
157
void ItemStore::search(const QString &query,
158
Query::EmptyBehaviour emptyBehaviour, QList<Result> &results) {
154
159
QStringMatcher stringMatcher(query, Qt::CaseInsensitive);
156
161
if (query.isEmpty()) {
162
if (emptyBehaviour == Query::EmptyBehaviour::NO_SUGGESTIONS) {
157
166
QMap<unsigned int, DocumentID> tempResults;
159
168
for (auto it(m_items.constBegin()); it != m_items.constEnd(); ++it) {
184
QString cleanQuery(query);
185
cleanQuery.remove(BAD_CHARACTERS);
175
187
WordList queryList;
176
for (const QString &word : query.split(WHITESPACE)) {
177
queryList.addWord(word.toStdString());
188
for (const QString &word : cleanQuery.split(WHITESPACE)) {
189
queryList.addWord(Word(word.toUtf8().constData()));
180
MatchResults matchResults(m_matcher.match(queryList));
182
int queryLength(query.length());
184
size_t maxResults = std::min(matchResults.size(), size_t(20));
186
for (size_t i(0); i < maxResults; ++i) {
187
DocumentID id(matchResults.getDocumentID(i));
188
double relevancy(matchResults.getRelevancy(i));
189
addResult(id, stringMatcher, queryLength, relevancy, results);
193
MatchResults matchResults(
194
m_matcher.onlineMatch(queryList, Word("command")));
196
int queryLength(query.length());
198
size_t maxResults = std::min(matchResults.size(), size_t(20));
200
for (size_t i(0); i < maxResults; ++i) {
201
DocumentID id(matchResults.getDocumentID(i));
202
double relevancy(matchResults.getRelevancy(i));
203
addResult(id, stringMatcher, queryLength, relevancy, results);
205
} catch (std::invalid_argument &e) {