dont use prefixed terms for looking for snippets. Reversible
This commit is contained in:
parent
4e1fd6c854
commit
66f7ac31eb
@ -60,11 +60,19 @@ static void listList(const string&, const vector<string>&)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Unprefix terms.
|
// Unprefix terms. Actually it's not completely clear if we should
|
||||||
|
// remove prefixes and keep all terms or prune the prefixed
|
||||||
|
// ones. There is no good way to be sure what will provide the best
|
||||||
|
// result in general.
|
||||||
|
static const bool prune_prefixed_terms = true;
|
||||||
static void noPrefixList(const vector<string>& in, vector<string>& out)
|
static void noPrefixList(const vector<string>& in, vector<string>& out)
|
||||||
{
|
{
|
||||||
for (vector<string>::const_iterator qit = in.begin();
|
for (vector<string>::const_iterator qit = in.begin();
|
||||||
qit != in.end(); qit++) {
|
qit != in.end(); qit++) {
|
||||||
|
if (prune_prefixed_terms) {
|
||||||
|
if (has_prefix(*qit))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
out.push_back(strip_prefix(*qit));
|
out.push_back(strip_prefix(*qit));
|
||||||
}
|
}
|
||||||
sort(out.begin(), out.end());
|
sort(out.begin(), out.end());
|
||||||
@ -82,17 +90,16 @@ bool Query::Native::getMatchTerms(unsigned long xdocid, vector<string>& terms)
|
|||||||
terms.clear();
|
terms.clear();
|
||||||
Xapian::TermIterator it;
|
Xapian::TermIterator it;
|
||||||
Xapian::docid id = Xapian::docid(xdocid);
|
Xapian::docid id = Xapian::docid(xdocid);
|
||||||
|
vector<string> iterms;
|
||||||
XAPTRY(terms.insert(terms.begin(),
|
XAPTRY(iterms.insert(iterms.begin(),
|
||||||
xenquire->get_matching_terms_begin(id),
|
xenquire->get_matching_terms_begin(id),
|
||||||
xenquire->get_matching_terms_end(id)),
|
xenquire->get_matching_terms_end(id)),
|
||||||
m_q->m_db->m_ndb->xrdb, m_q->m_reason);
|
m_q->m_db->m_ndb->xrdb, m_q->m_reason);
|
||||||
|
|
||||||
if (!m_q->m_reason.empty()) {
|
if (!m_q->m_reason.empty()) {
|
||||||
LOGERR(("getMatchTerms: xapian error: %s\n", m_q->m_reason.c_str()));
|
LOGERR(("getMatchTerms: xapian error: %s\n", m_q->m_reason.c_str()));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
noPrefixList(iterms, terms);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -259,11 +266,8 @@ int Query::Native::getFirstMatchPage(Xapian::docid docid, string& term)
|
|||||||
Xapian::Database& xrdb(ndb->xrdb);
|
Xapian::Database& xrdb(ndb->xrdb);
|
||||||
|
|
||||||
vector<string> terms;
|
vector<string> terms;
|
||||||
{
|
getMatchTerms(docid, terms);
|
||||||
vector<string> iterms;
|
|
||||||
getMatchTerms(docid, iterms);
|
|
||||||
noPrefixList(iterms, terms);
|
|
||||||
}
|
|
||||||
if (terms.empty()) {
|
if (terms.empty()) {
|
||||||
LOGDEB(("getFirstMatchPage: empty match term list (field match?)\n"));
|
LOGDEB(("getFirstMatchPage: empty match term list (field match?)\n"));
|
||||||
return -1;
|
return -1;
|
||||||
@ -319,15 +323,12 @@ int Query::Native::makeAbstract(Xapian::docid docid,
|
|||||||
|
|
||||||
// The (unprefixed) terms matched by this document
|
// The (unprefixed) terms matched by this document
|
||||||
vector<string> matchedTerms;
|
vector<string> matchedTerms;
|
||||||
{
|
getMatchTerms(docid, matchedTerms);
|
||||||
vector<string> iterms;
|
if (matchedTerms.empty()) {
|
||||||
getMatchTerms(docid, iterms);
|
LOGDEB(("makeAbstract::Empty term list\n"));
|
||||||
noPrefixList(iterms, matchedTerms);
|
return ABSRES_ERROR;
|
||||||
if (matchedTerms.empty()) {
|
|
||||||
LOGDEB(("makeAbstract::Empty term list\n"));
|
|
||||||
return ABSRES_ERROR;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
listList("Match terms: ", matchedTerms);
|
listList("Match terms: ", matchedTerms);
|
||||||
|
|
||||||
// Retrieve the term frequencies for the query terms. This is
|
// Retrieve the term frequencies for the query terms. This is
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user