Xapian实战(四):搜索
参考资料:
1. Xapian中用于搜索的类
Enquire - 提供了检索的接口;(Enquire API)
QueryParser(QueryParser API) - 解析待查找的字符串,返回Query(Query API);
MSet - 用于搜索结果的存储和显示;(MSet API)
2. 实战
@ 检索流程
打开Xapian::Database,数据库中可以使用Database::add_database()函数包含多个索引;
根据database构造Xapian::Enquire,提供检索接口;
创建Xapain::QueryParser,解析待查找的字符串,生成Xapian::Query;
‘利用Enquire对象将解析后的字符串加入查询会话中;
使用Enquire::get_mset()函数返回MSet,得到查询结果;
使用MSetIterator对象对结果进行显示;
@ sample
1 // 创建待搜索数据库 2 Xapian::Database searchdb; 3 searchdb.add_database(dba); 4 searchdb.add_database(dbb); 5 6 // 生成查询会话 7 Xapian::Enquire enquire(searchdb); 8 9 // 解析待查找字符串 10 Xapian::QueryParser qp; 11 qp.set_database(searchdb); 12 qp.set_stemming_strategy(Xapian::QueryParser::STEM_NONE); 13 Xapian::Query query = qp.parse_query("待查找字符串"); 14 15 // 将解析后的字符串加入会话 16 enquire.set_query(query); 17 18 //得到查询结果 19 Xapian::MSet matches = enquire.get_mset(0, 10); // 显示前10个结果 20 21 // 显示结果 22 for (Xapian::MSetIterator idx = matches.begin(); idx != matches.end(); ++idx) { 23 std::cout << idx.get_rank()+1 << ":" 24 << idx.get_percent() << "% docid = " << *idx 25 << " [" << i.get_document().get_data() << " ]" 26 << std::endl << std::endl; 27 }