Xapian实战(三):索引
参考资料:
1. Xapian中各类要点总结
@ Database
Xapian的Database是所有用于检索的信息表的集合,根据xapian的不同有以下几种创建Database时可选择的后端类型:
brass - 当前开发中的后端,并将作为1.4.x版本以后的默认后端;
chert -
1.2.x版本的默认后端,支持增量修改、单写+多读并发的模式;
可以利用Chert Namespace中的open函数分别生成DataBase(仅读取功能)和WritableDatabase(支持读写)类型的数据库;
flint - 1.0.x的默认后端,与chert类似;
inmemory -
全内存的database,可用于建立临时的小数据库;
可以利用InMemory Namespace中的open函数创建WritableDatabase(支持读写)类型的数据库;
@ Document
Xapian中的Document包括三个元素:term, data, value;
term -
若Document D被名为T的term所描述,那么T被认为索引了D;
Term可以使用TermGenerator生成:给TermGenerator对象设置Document,再将一段用空格分开的字符串传入TermGenerator对象中,就可以给Document加上这段文本的索引域了(英文单词使用空格分割可以直接使用TermGenerator,中文需要进行分词操作);
value -
每个Document中可有多个value,value可以方便在匹配过程中快速访问,它们可以用作排序、排队多余重复的document和范围检索等用途;
data -
每个Document中只有一个,可以为任意类型格式的数据,为最后搜索时向用户显示的内容;
2. 实战
@ Database / WritableDatabase
// 创建Chert类型的可读写数据库
Xapian::WritableDatabase writabledb = Xapian::Chert::open(dbname, Xapian::DB_CREATE_OR_OVERWRITE); // 向数据库中加入Document
Xapian::Document mydoc;
...
writabledb.add_document(mydoc);
// 更改数据库后需要进行确认操作
writabledb.commit();
@ Document
Xapian::Document mydoc;
// 设置data
std::string data = "this is the description of a page";
mydoc.set_data(data);
// 设置value
std::vector<std::string> value = {test1, test2};
std::vector<std::string>::iterator itv = value.begin();
int count = ; // value的槽号
for (; itv != value.end(); ++itv) {
mydoc.add_value(count, *itv);
++ count;
}
// 设置term
std::string newcontent; // 已经分词完毕带有空格的文档
Xapian::TermGenerator indexer;
indexer.set_document(mydoc);
indexer.index_text(newcontent); // 显示data
std::cout << mydoc.get_data() << std::endl;
// 显示value
Xapian::ValueIterator itvalue = mydoc.values_begin();
for (; itvalue != mydoc.values_end(); ++itvalue) {
std::cout << *itvalue << std::endl;
}
// 显示term
Xapian::TermIterator iterm = mydoc.termlist_begin();
for (; iterm != mydoc.termlist_end(); ++iterm) {
std::cout << *iterm << std::endl;
}
Xapian实战(三):索引的更多相关文章
- coreseek实战(三):全文搜索在php中应用(使用api接口)
coreseek实战(三):全文搜索在php中应用(使用api接口) 这一篇文章开始学习在php页面中通过api接口,使用coreseek全文搜索. 第一步:综合一下前两篇文章,coreseek实战( ...
- 【转】WF4.0实战系列索引
转自:http://www.cnblogs.com/zhuqil/archive/2010/07/05/wf4-in-action-index.html 此系列的工作流文件案例比较多点,实用性好. W ...
- Xapian的内存索引-添加文档
本文主要记录Xapian的内存索引在添加文档过程中,做了哪些事情. 内容主要为函数执行过程中的流水线. demo代码: Xapian::WritableDatabase db = Xapian::In ...
- Xapian的内存索引
关键字:xapian.内存索引 xapian除了提供用于生产环境的磁盘索引,也提供了内存索引(InMemoryDatabase).内存索引.我们可以通过观察内存索引的设计,来了解xapian的设计思路 ...
- Python爬虫实战三之实现山东大学无线网络掉线自动重连
综述 最近山大软件园校区QLSC_STU无线网掉线掉的厉害,连上之后平均十分钟左右掉线一次,很是让人心烦,还能不能愉快地上自习了?能忍吗?反正我是不能忍了,嗯,自己动手,丰衣足食!写个程序解决掉它! ...
- Thrift RPC实战(三) thrift序列化揭秘
本文主要讲解Thrift的序列化机制, 看看thrift作为数据交换格式是如何工作的? 1.构造应用场景: 1). 首先我们先来定义下thrift的简单结构. 1 2 3 4 5 namespace ...
- miniFTP项目实战三
项目简介: 在Linux环境下用C语言开发的Vsftpd的简化版本,拥有部分Vsftpd功能和相同的FTP协议,系统的主要架构采用多进程模型,每当有一个新的客户连接到达,主进程就会派生出一个ftp服务 ...
- Mysql实战之索引
author:JevonWei 版权声明:原创作品 索引基础: 索引:提取索引的创建在的表上字段中的数据,构建出一个独特的数据结构: 索引的作用:加速查询操作:副作用:降低写操作性能: 表中数据子集: ...
- Xapian实战(四):搜索
参考资料: 学习Xapian(1)-基础的建索引和搜索 1. Xapian中用于搜索的类 Enquire - 提供了检索的接口:(Enquire API) QueryParser(QueryParse ...
随机推荐
- 【php】错误日志处理
一. 错误处理: a) 在写程序的过程当中,遇到错误时,你的反应?可能比较急躁,比较烦 b) 遇到错误后:一别哭,二别闹,三别上吊,四别尿……二. 你可能会遇到的错误: a) 语法错误 i. 语法错误 ...
- JAVA中基础类型和字串类型之间的相互转换
转自:https://www.imooc.com/code/2251 仅做个人学习记录之用,侵删. 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换. 其中,基本类型转换为字符串有三种方法 ...
- scala_spark实践3
Spark 读写HBase优化 读数据 可以采用RDD的方式读取HBase数据: val conf = HBaseConfiguration.create() conf.set(TableInputF ...
- 【论文研读】强化学习入门之DQN
最近在学习斯坦福2017年秋季学期的<强化学习>课程,感兴趣的同学可以follow一下,Sergey大神的,有英文字幕,语速有点快,适合有一些基础的入门生. 今天主要总结上午看的有关DQN ...
- 解决SpringMVC的乱码问题:CharacterEncodingFilter
在使用 SpringMVC 框架的过程中,如果前台有包含中文的请求,或者后台有包含中文的响应,有可能会出现乱码的情况.在以前的 Servlet 中,我们使用 request.setCharacterE ...
- Python - 利用词云wordcloud,jieba和中国地图制作四大名著的热词图
热词图很酷炫,也非常适合热点事件,抓住重点,以图文结合的方式表现出来,很有冲击力.下面这段代码是制作热词图的,用到了以下技术: jieba,把文本分词 wordcloud,制作热图 chardet,辨 ...
- Liunx常用操作(一)-删除命令
在linux命令行模式下,如何一次性快速删除一行刚刚输入的命令? 经常在命令行输入命令的时候,一段文字都需要删除,一个字段一个字段,比较耗费时间 以下提供一些命令,配合在一起操作,可以一定程度提高工作 ...
- Thymeleaf+SpringBoot+Mybatis实现的齐贤易游网旅游信息管理系统
项目简介 项目来源于:https://github.com/liuyongfei-1998/root 本系统是基于Thymeleaf+SpringBoot+Mybatis.是非常标准的SSM三大框架( ...
- centos 部署 vue项目
安装Nodejs 下载安装包,可选择其他版本 node-v10.16.0-linux-x64.tar.xz 将下载文件上传至linux服务器并解压 tar -xvf node-v10.16.0-lin ...
- 关于go的通信通道channel——chan的一些问题
go版本 1.8 chan类型的声明,有以下几种: var c chan int c := make(chan int) //slice.map.chan都可以通过用make来初始化,其中map.ch ...