hldata generation during query processing: increase slack if position increases faster than term count (cjk)
This commit is contained in:
parent
6cd2c9e2ca
commit
fae0621d76
@ -540,40 +540,6 @@ bool SearchDataClauseSimple::expandTerm(Rcl::Db &db,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do distribution of string vectors: a,b c,d -> a,c a,d b,c b,d
|
|
||||||
void multiply_groups(vector<vector<string> >::const_iterator vvit,
|
|
||||||
vector<vector<string> >::const_iterator vvend,
|
|
||||||
vector<string>& comb,
|
|
||||||
vector<vector<string> >&allcombs)
|
|
||||||
{
|
|
||||||
// Remember my string vector and compute next, for recursive calls.
|
|
||||||
vector<vector<string> >::const_iterator myvit = vvit++;
|
|
||||||
|
|
||||||
// Walk the string vector I'm called upon and, for each string,
|
|
||||||
// add it to current result, an call myself recursively on the
|
|
||||||
// next string vector. The last call (last element of the vector of
|
|
||||||
// vectors), adds the elementary result to the output
|
|
||||||
|
|
||||||
// Walk my string vector
|
|
||||||
for (vector<string>::const_iterator strit = (*myvit).begin();
|
|
||||||
strit != (*myvit).end(); strit++) {
|
|
||||||
|
|
||||||
// Add my current value to the string vector we're building
|
|
||||||
comb.push_back(*strit);
|
|
||||||
|
|
||||||
if (vvit == vvend) {
|
|
||||||
// Last call: store current result
|
|
||||||
allcombs.push_back(comb);
|
|
||||||
} else {
|
|
||||||
// Call recursively on next string vector
|
|
||||||
multiply_groups(vvit, vvend, comb, allcombs);
|
|
||||||
}
|
|
||||||
// Pop the value I just added (make room for the next element in my
|
|
||||||
// vector)
|
|
||||||
comb.pop_back();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void prefix_vector(vector<string>& v, const string& prefix)
|
static void prefix_vector(vector<string>& v, const string& prefix)
|
||||||
{
|
{
|
||||||
for (vector<string>::iterator it = v.begin(); it != v.end(); it++) {
|
for (vector<string>::iterator it = v.begin(); it != v.end(); it++) {
|
||||||
@ -740,6 +706,10 @@ void SearchDataClauseSimple::processPhraseOrNear(Rcl::Db &db, string& ermsg,
|
|||||||
HighlightData::TermGroup tg;
|
HighlightData::TermGroup tg;
|
||||||
tg.orgroups = groups;
|
tg.orgroups = groups;
|
||||||
tg.slack = slack;
|
tg.slack = slack;
|
||||||
|
if (splitData->lastpos() > splitData->alltermcount()) {
|
||||||
|
// Adjust for multiple pos per span (e.g. cjk)
|
||||||
|
tg.slack += splitData->lastpos() - splitData->alltermcount();
|
||||||
|
}
|
||||||
tg.grpsugidx = m_hldata.ugroups.size() - 1;
|
tg.grpsugidx = m_hldata.ugroups.size() - 1;
|
||||||
tg.kind = (op == Xapian::Query::OP_PHRASE) ?
|
tg.kind = (op == Xapian::Query::OP_PHRASE) ?
|
||||||
HighlightData::TermGroup::TGK_PHRASE :
|
HighlightData::TermGroup::TGK_PHRASE :
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user