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 }

时间: 2024-10-09 11:58:54

Xapian实战(四):搜索的相关文章

Python爬虫实战四之抓取淘宝MM照片

福利啊福利,本次为大家带来的项目是抓取淘宝MM照片并保存起来,大家有没有很激动呢? 最新动态 更新时间:2015/8/2 最近好多读者反映代码已经不能用了,原因是淘宝索引页的MM链接改了.网站改版了,URL的索引已经和之前的不一样了,之前可以直接跳转到每个MM的个性域名,现在中间加了一个跳转页,本以为可以通过这个页面然后跳转到原来的个性域名,而经过一番折腾发现,这个跳转页中的内容是JS动态生成的,所以不能用Urllib库来直接抓取了,本篇就只提供学习思路,代码不能继续用了. 之后博主会利用其它方

Android切近实战(四)

上一节我们看了系统参数的主界面,大家应该还有印象,如下 那本节我们来看一下修改和删除. 上节我已经介绍了系统参数修改以及删除的WebService,如下 其中系统参数修改的描述如下 系统参数删除的定义如下 接下来我们需要知道的是如何实现修改和删除按钮的功能.记得上节我们使用系统提供的SimpleAdapter去展示listview的数据.这样是无法实现按钮的响应的.所以在实现这两个按钮的功能之前,首先需要让他们能够响应点击事件.所以需要我们自己定义Adapter. public class cu

Xapian实战(二):core concepts

参考资料 core concepts 正文 1. 并发性 xapian不包含任何全局变量,所以多线程编程中,在没有共享资源的情况下可以安全使用xapian.在实际操作中,由于每个线程都可以创建自己的xapian.Database对象,所以这个限制条件完全没有问题.当然如果真的需要在多线程中使用同一个xapian对象,则需要用到mutex的线程锁. 需要注意的是,有些xapian对象包含了其他对象的引用——例如,xapian.Database.get_document()的结果xapian.Doc

机器学习实战四(Logistic Regression)

机器学习实战四(Logistic Regression) 这一章会初次接触最优化算法,在日常生活中应用很广泛.这里我们会用到基本的梯度上升法,以及改进的随机梯度上升法. Logistic回归 优点:计算代价不高,易于理解和实现 缺点:容易欠拟合,分裂精度可能不高 原理:根据现有数据堆分类边界线建立回归公式,依次进行分类. 这里的回归其实就是最佳拟合的意思. 1.基于Logistic回归和Sigmoid函数的分类. 我们需要一个这样的函数:接受所有的输入,然后预测出类别.例如,如果只有两类,则输出

Xapian实战(三):索引

参考资料: Xapian:Document, Value和Term Xapian:Database Xapian机制简要介绍 1. Xapian中各类要点总结 @ Database Database API参考 WritableDatabase API参考 Xapian的Database是所有用于检索的信息表的集合,根据xapian的不同有以下几种创建Database时可选择的后端类型: brass - 当前开发中的后端,并将作为1.4.x版本以后的默认后端: chert - 1.2.x版本的默

C# Redis实战(四)

四.写入数据 在C# Redis实战(三)中我们已经配置好了web.config程序,并且能通过C#代码来读取和管理以上配置信息. 接下来,就可以进行Redis的数据写入了.Redis中可以用Store和StoreAll分别保存单条和多条数据,C#中具体代码如下: 1.保存多条数据 [csharp] view plain copy protected void btnOpenDB_Click(object sender, EventArgs e) { //System.Diagnostics.P

Java的理论,开发,进阶,实战四个学习过程

Java 的学习过程分为4个阶段:理论阶段.开发阶段.进阶阶段以及实战阶段. 一.理论阶段 在具体谈论Java知识点之前,我们先聊聊Java 语言自身的一些特点.生态系统以及适用的场景,这有助于我们更好的学习语言本身. 首先,我们从Java 语言自身的实现机制来聊聊Java 语言的一些特性: 面向对象:Java 是一门面向对象的编程语言,封装.继承.多态这些特性使得Java 语言适用于大型软件系统的研发. 跨平台:这是Java 最重要的特性之一,由于有虚拟机的支持,Java 代码可以无缝运行在任

整理grep实战文本搜索过滤技巧

一:grep的简介: 文本搜索工具,根据用户指定的文本模式对目标文件进行逐行搜索,显示能够被模式所匹配到的行.配合正则表达式的使用可以实现强大的文本处理.下面一一说明正则的例子. 二:文本处理工具分类 常用的有:grep,egrep,fgrep. 区别: grep:在没有参数的情况下,只输出符合RE(Regular Expression)字符. egrep:等同于grep -E,和grep最大的区别就是表现在转义符上比如grep 做次数匹配时\{n,m\}egrep则不需要直接{n,m}.egr

Java并发编程原理与实战四十一:重排序 和 happens-before

一.概念理解 首先我们先来了解一下什么是重排序:重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段. 从Java源代码到最终实际执行的指令序列,会分别经历下面3种重排序,如下图所示 上述的1属于编译器重排序,2和3属于处理器重排序.这些重排序可能会导致多线程程序出现内存可见性问题.在单线程程序中,对存在控制依赖的操作重排序,不会改变执行结果(这也是as-if-serial语义允许对存在控制依赖的操作做重排序的原因):但在多线程程序中,对存在控制依赖的操作重排序,可能会改变