Xapian实战(四):搜索

参考资料:

学习Xapian(1)-基础的建索引和搜索

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 }
View Code

 

posted on 2016-08-26 16:57  tanfy  阅读(1131)  评论(0编辑  收藏  举报

导航