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 ...
随机推荐
- 【数据库】MySQL数据库(一)
一.MySQL数据库系统 MySQL数据库系统就是用来对数据库.数据的一些管理 二.数据库系统 1.数据库 就是用来存储各种数据的 2.数据库管理系统 就是用来管理各种数据库的数据的一个系统 三.常见 ...
- android之间的各项信息传输类型
首先是activity想fragment怎样动态的传输数据: 一:activity与fragment之间进行数据传递是,在Activity中将要传递的数据封装在一Bundle中,使用setArgume ...
- docker win10 基本指令
一.镜像操作 docker images 本地镜像 docker pull imagename 获取网上获取镜像 docker run 创建docker容器 docker rmi imagename ...
- wireshark抓包实战(一),抓包原理
一.什么样的"包"能被wireshark抓住呢? 1.本机 即直接抓取进出本机网卡的流量包.这种情况下,wireshark会绑定本机的一块网卡. 2.集线器 用于抓取流量泛洪,冲突 ...
- [go]map基本使用和底层原理
1.map基本使用 map声明 var m4 map[int]int //只是声明 没有开辟空间 m4[1]=100 //报错 log.Println(m4) 创建 //1 m3:=make(map[ ...
- MathJax的基本使用
MathJax是一个开放源代码的JavaScript显示引擎,适用于所有现代浏览器中的LaTeX.MathML和AsciMath表示法. MathJax官网为 https://www.mathjax. ...
- CVE-2020-1938:Apache-Tomcat-Ajp漏洞-复现
0x00 漏洞简介 Apache与Tomcat都是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的Web服务器运行. Apache Tomcat服务器存在文件包含 ...
- AJ学IOS 之CoreLocation地理编码小Demo输入城市得到经纬度
AJ分享,必须精品 一:效果 输入地名,可以得到相应的经纬度,知识为了学习写的小Demo 二:实现步骤 一 :首先获取用户输入的位置. 二 :创建地理编码对象. 三 :利用地理编码对象编码,根据传入的 ...
- 【spring 国际化】springMVC、springboot国际化处理详解
在web开发中我们常常会遇到国际化语言处理问题,那么如何来做到国际化呢? 你能get的知识点? 使用springgmvc与thymeleaf进行国际化处理. 使用springgmvc与jsp进行国际化 ...
- XFS文件系统的备份与恢复
永久修改主机名:hostnamectl set-hostname oldboy临时修改主机名:hostname xfsdump备份xfsdump -f 备份的文件位置 要备份的分区或者磁盘 免交互备份 ...