|
a/src/rcldb/rcldb.cpp |
|
b/src/rcldb/rcldb.cpp |
|
... |
|
... |
1605 |
|
1605 |
|
1606 |
// Return existing stem db languages
|
1606 |
// Return existing stem db languages
|
1607 |
vector<string> Db::getStemLangs()
|
1607 |
vector<string> Db::getStemLangs()
|
1608 |
{
|
1608 |
{
|
1609 |
LOGDEB(("Db::getStemLang\n"));
|
1609 |
LOGDEB(("Db::getStemLang\n"));
|
1610 |
vector<string> dirs;
|
1610 |
vector<string> langs;
|
1611 |
if (m_ndb == 0 || m_ndb->m_isopen == false)
|
1611 |
if (m_ndb == 0 || m_ndb->m_isopen == false)
|
1612 |
return dirs;
|
1612 |
return langs;
|
1613 |
dirs = StemDb::getLangs(m_basedir);
|
1613 |
langs = StemDb::getLangs(m_ndb->xrdb);
|
1614 |
return dirs;
|
1614 |
return langs;
|
1615 |
}
|
1615 |
}
|
1616 |
|
1616 |
|
1617 |
/**
|
1617 |
/**
|
1618 |
* Delete stem db for given language
|
1618 |
* Delete stem db for given language
|
1619 |
*/
|
1619 |
*/
|
1620 |
bool Db::deleteStemDb(const string& lang)
|
1620 |
bool Db::deleteStemDb(const string& lang)
|
1621 |
{
|
1621 |
{
|
1622 |
LOGDEB(("Db::deleteStemDb(%s)\n", lang.c_str()));
|
1622 |
LOGDEB(("Db::deleteStemDb(%s)\n", lang.c_str()));
|
1623 |
if (m_ndb == 0 || m_ndb->m_isopen == false)
|
1623 |
if (m_ndb == 0 || m_ndb->m_isopen == false || !m_ndb->m_iswritable)
|
1624 |
return false;
|
1624 |
return false;
|
1625 |
return StemDb::deleteDb(m_basedir, lang);
|
1625 |
return StemDb::deleteDb(m_ndb->xwdb, lang);
|
1626 |
}
|
1626 |
}
|
1627 |
|
1627 |
|
1628 |
/**
|
1628 |
/**
|
1629 |
* Create database of stem to parents associations for a given language.
|
1629 |
* Create database of stem to parents associations for a given language.
|
1630 |
* We walk the list of all terms, stem them, and create another Xapian db
|
1630 |
* We walk the list of all terms, stem them, and create another Xapian db
|
|
... |
|
... |
1632 |
* parent terms in the document data.
|
1632 |
* parent terms in the document data.
|
1633 |
*/
|
1633 |
*/
|
1634 |
bool Db::createStemDb(const string& lang)
|
1634 |
bool Db::createStemDb(const string& lang)
|
1635 |
{
|
1635 |
{
|
1636 |
LOGDEB(("Db::createStemDb(%s)\n", lang.c_str()));
|
1636 |
LOGDEB(("Db::createStemDb(%s)\n", lang.c_str()));
|
1637 |
if (m_ndb == 0 || m_ndb->m_isopen == false)
|
1637 |
if (m_ndb == 0 || m_ndb->m_isopen == false || !m_ndb->m_iswritable) {
|
|
|
1638 |
LOGERR(("createStemDb: db not open or not writable\n"));
|
1638 |
return false;
|
1639 |
return false;
|
|
|
1640 |
}
|
1639 |
|
1641 |
|
1640 |
return StemDb::createDb(m_ndb->xdb(), m_basedir, lang);
|
1642 |
return StemDb::createDb(m_ndb->xwdb, lang);
|
1641 |
}
|
1643 |
}
|
1642 |
|
1644 |
|
1643 |
/**
|
1645 |
/**
|
1644 |
* This is called at the end of an indexing session, to delete the
|
1646 |
* This is called at the end of an indexing session, to delete the
|
1645 |
* documents for files that are no longer there. This can ONLY be called
|
1647 |
* documents for files that are no longer there. This can ONLY be called
|
|
... |
|
... |
1840 |
int operator()(const TermMatchEntry& l, const TermMatchEntry& r) {
|
1842 |
int operator()(const TermMatchEntry& l, const TermMatchEntry& r) {
|
1841 |
return !l.term.compare(r.term);
|
1843 |
return !l.term.compare(r.term);
|
1842 |
}
|
1844 |
}
|
1843 |
};
|
1845 |
};
|
1844 |
|
1846 |
|
1845 |
bool Db::stemExpand(const string &lang, const string &term,
|
1847 |
bool Db::stemExpand(const string &langs, const string &term,
|
1846 |
TermMatchResult& result, int max)
|
1848 |
TermMatchResult& result, int max)
|
1847 |
{
|
1849 |
{
|
1848 |
vector<string> dirs(1, m_basedir);
|
1850 |
if (m_ndb == 0 || m_ndb->m_isopen == false)
|
1849 |
dirs.insert(dirs.end(), m_extraDbs.begin(), m_extraDbs.end());
|
1851 |
return false;
|
1850 |
for (vector<string>::iterator it = dirs.begin(); it != dirs.end(); it++) {
|
|
|
1851 |
vector<string> more;
|
1852 |
vector<string> exp;
|
1852 |
StemDb::stemExpand(*it, lang, term, more);
|
1853 |
if (!StemDb::stemExpand(m_ndb->xrdb, langs, term, exp))
|
1853 |
LOGDEB1(("Db::stemExpand: Got %d from %s\n",
|
1854 |
return false;
|
1854 |
more.size(), it->c_str()));
|
|
|
1855 |
result.entries.insert(result.entries.end(), more.begin(), more.end());
|
1855 |
result.entries.insert(result.entries.end(), exp.begin(), exp.end());
|
1856 |
if (result.entries.size() >= (unsigned int)max)
|
|
|
1857 |
break;
|
|
|
1858 |
}
|
|
|
1859 |
LOGDEB1(("Db:::stemExpand: final count %d \n", result.size()));
|
|
|
1860 |
return true;
|
1856 |
return true;
|
1861 |
}
|
1857 |
}
|
1862 |
|
1858 |
|
1863 |
/** Add prefix to all strings in list */
|
1859 |
/** Add prefix to all strings in list */
|
1864 |
static void addPrefix(vector<TermMatchEntry>& terms, const string& prefix)
|
1860 |
static void addPrefix(vector<TermMatchEntry>& terms, const string& prefix)
|