首页 > 数据库 > > xapian搜索系统存储结构解读
Xapian::Document doc;
doc.add_term("K你好");
doc.add_term("K那里");
//posting是带position的term
doc.add_posting("K吃饭", 14);
doc.add_posting("K玩耍", 8);
/*
这里最好先用一个map<string, int>放置value的名称和索引的配对
这里使用起来像Lucene的SortField一样了。
*/
doc.add_value(1, "1");
doc.set_data("你好啊,在那里玩耍呢?还没吃饭吗?");
//创建一个可写的db
Xapian::WritableDatabase db("c:\\db");
//将document加入到db中,返回document的id,此id在db中是唯一的
Xapian::docid id = db.add_document(doc);
//刷新到硬盘中
db.flush();//获取
Xapian::Document doc = db.get_document(id);
string v = doc.get_value(1);
printf(v);//输出
string data = doc.get_data();
printf(data);//输出"你好啊,在那里玩耍呢?还没吃饭吗?"
for (Xapian::TermIterator iter = doc.termlist_begin(); iter != doc.termlist_end(); ++iter)
{
printf(*iter);//依次输出term和posting
}
读取倒排列表(posting table的例子)
相关的类主要有两个,一个是PositionIterator,一个是PostingSource
其中
PositionIterator用来遍历一个term的所有docid列表
PostingSource则用来提供postings的扩展数据资源。来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26692020/viewspace-3118927/ ,如需转载,请注明出处,否则将追究法律责任。