zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    将一个单向链表逆序
    高精度加法
    从反汇编的角度看引用和指针的区别
    冒泡排序
    josephus(约瑟夫)问题
    获取每个进程可打开的最大文件数量
    AIX免费终端的获取
    [转] Linux应用层的定时器Timer
    POD(plain old data)
    char与wchar_t的区别
  • 原文地址:https://www.cnblogs.com/tanfy/p/5785289.html
Copyright © 2011-2022 走看看