本文整理汇总了C++中xapian::WritableDatabase::postlist_begin方法的典型用法代码示例。如果您正苦于以下问题:C++ WritableDatabase::postlist_begin方法的具体用法?C++ WritableDatabase::postlist_begin怎么用?C++ WritableDatabase::postlist_begin使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类xapian::WritableDatabase
的用法示例。
在下文中一共展示了WritableDatabase::postlist_begin方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: renameLabel
/// Renames a label.
bool XapianIndex::renameLabel(const string &name, const string &newName)
{
bool renamedLabel = false;
XapianDatabase *pDatabase = XapianDatabaseFactory::getDatabase(m_databaseName, false);
if (pDatabase == NULL)
{
cerr << "Bad index " << m_databaseName << endl;
return false;
}
try
{
Xapian::WritableDatabase *pIndex = pDatabase->writeLock();
if (pIndex != NULL)
{
string term("XLABEL:");
// Get documents that have this label
term += name;
for (Xapian::PostingIterator postingIter = pIndex->postlist_begin(term);
postingIter != pIndex->postlist_end(term); ++postingIter)
{
Xapian::docid docId = *postingIter;
// Get the document
Xapian::Document doc = pIndex->get_document(docId);
// Remove the term
doc.remove_term(term);
// ...add the new one
doc.add_term(limitTermLength(string("XLABEL:") + newName));
// ...and update the document
pIndex->replace_document(docId, doc);
}
renamedLabel = true;
}
}
catch (const Xapian::Error &error)
{
cerr << "Couldn't delete label: " << error.get_type() << ": " << error.get_msg() << endl;
}
catch (...)
{
cerr << "Couldn't delete label, unknown exception occured" << endl;
}
pDatabase->unlock();
return renamedLabel;
}
示例2: hasLabel
/// Determines whether a document has a label.
bool XapianIndex::hasLabel(unsigned int docId, const string &name) const
{
bool foundLabel = false;
XapianDatabase *pDatabase = XapianDatabaseFactory::getDatabase(m_databaseName, false);
if (pDatabase == NULL)
{
cerr << "Bad index " << m_databaseName << endl;
return false;
}
try
{
Xapian::WritableDatabase *pIndex = pDatabase->writeLock();
if (pIndex != NULL)
{
string term("XLABEL:");
// Get documents that have this label
// FIXME: would it be faster to get the document's terms ?
term += name;
Xapian::PostingIterator postingIter = pIndex->postlist_begin(term);
if (postingIter != pIndex->postlist_end(term))
{
// Is this document in the list ?
postingIter.skip_to(docId);
if ((postingIter != pIndex->postlist_end(term)) &&
(docId == (*postingIter)))
{
foundLabel = true;
}
}
}
}
catch (const Xapian::Error &error)
{
cerr << "Couldn't check document labels: " << error.get_msg() << endl;
}
catch (...)
{
cerr << "Couldn't check document labels, unknown exception occured" << endl;
}
pDatabase->unlock();
return foundLabel;
}