参考资料:

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版本的默认后端,支持增量修改、单写+多读并发的模式;

可以利用Chert Namespace中的open函数分别生成DataBase(仅读取功能)和WritableDatabase(支持读写)类型的数据库;

Chert API参考

flint - 1.0.x的默认后端,与chert类似;

inmemory -

全内存的database,可用于建立临时的小数据库;

可以利用InMemory Namespace中的open函数创建WritableDatabase(支持读写)类型的数据库;

InMemory API参考

@ Document

Document API参考

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实战(三):索引的更多相关文章

  1. coreseek实战(三):全文搜索在php中应用(使用api接口)

    coreseek实战(三):全文搜索在php中应用(使用api接口) 这一篇文章开始学习在php页面中通过api接口,使用coreseek全文搜索. 第一步:综合一下前两篇文章,coreseek实战( ...

  2. 【转】WF4.0实战系列索引

    转自:http://www.cnblogs.com/zhuqil/archive/2010/07/05/wf4-in-action-index.html 此系列的工作流文件案例比较多点,实用性好. W ...

  3. Xapian的内存索引-添加文档

    本文主要记录Xapian的内存索引在添加文档过程中,做了哪些事情. 内容主要为函数执行过程中的流水线. demo代码: Xapian::WritableDatabase db = Xapian::In ...

  4. Xapian的内存索引

    关键字:xapian.内存索引 xapian除了提供用于生产环境的磁盘索引,也提供了内存索引(InMemoryDatabase).内存索引.我们可以通过观察内存索引的设计,来了解xapian的设计思路 ...

  5. Python爬虫实战三之实现山东大学无线网络掉线自动重连

    综述 最近山大软件园校区QLSC_STU无线网掉线掉的厉害,连上之后平均十分钟左右掉线一次,很是让人心烦,还能不能愉快地上自习了?能忍吗?反正我是不能忍了,嗯,自己动手,丰衣足食!写个程序解决掉它! ...

  6. Thrift RPC实战(三) thrift序列化揭秘

    本文主要讲解Thrift的序列化机制, 看看thrift作为数据交换格式是如何工作的? 1.构造应用场景: 1). 首先我们先来定义下thrift的简单结构. 1 2 3 4 5 namespace ...

  7. miniFTP项目实战三

    项目简介: 在Linux环境下用C语言开发的Vsftpd的简化版本,拥有部分Vsftpd功能和相同的FTP协议,系统的主要架构采用多进程模型,每当有一个新的客户连接到达,主进程就会派生出一个ftp服务 ...

  8. Mysql实战之索引

    author:JevonWei 版权声明:原创作品 索引基础: 索引:提取索引的创建在的表上字段中的数据,构建出一个独特的数据结构: 索引的作用:加速查询操作:副作用:降低写操作性能: 表中数据子集: ...

  9. Xapian实战(四):搜索

    参考资料: 学习Xapian(1)-基础的建索引和搜索 1. Xapian中用于搜索的类 Enquire - 提供了检索的接口:(Enquire API) QueryParser(QueryParse ...

随机推荐

  1. MTK Android Android数据保存到系统数据库

    如果有留意Android中系统设置Settings里面的源码,你会发现代码中频繁用到了Settings.System操作,该类通过键值对的形式,将一些特定的值以全局的模式保存到Setting的数据库中 ...

  2. (js描述的)数据结构[哈希表1.2](9)

    一. 优秀的哈希函数 1.快速的计算: 需要快速的计算来获得对应的hashCode(霍纳法则来减少乘除次数) 2.均匀的分布: 尽可能将元素映射到不同的位置,让元素在哈希表中均匀分布 二.哈希表的扩容 ...

  3. "浮动按钮"组件:<fab> —— 快应用组件库H-UI

        <import name="fab" src="../Common/ui/h-ui/basic/c_fab"></import ...

  4. virtual box设置网络,使用nat网络和仅主机(Host Only)网络进行连接

    virtual box设置网络,使用nat网络和仅主机(Host Only)网络进行连接 前言 作为程序员难免要在本机电脑安装虚拟机,最近在用virtual box安装虚拟机的时候遇到了点问题. 对于 ...

  5. Linux的文本编辑和文本内容查看命令

    Linux的文本编辑和文本内容查看命令 1.文本编辑命令 vi:用于编辑文本文件,基本上可以分为三种模式,分别是一般模式.编辑模式.命令行模式.    一般模式:当编辑一个文件时,刚进入文件就是一般模 ...

  6. 数据结构和算法(Golang实现)(5)简单入门Golang-接口

    接口 在Golang世界中,有一种叫interface的东西,很是神奇. 一.数据类型 interface{} 如果你事前并不知道变量是哪种数据类型,不知道它是整数还是字符串,但是你还是想要使用它. ...

  7. elasticsearch7.6.2实战(2)-es可视化及分析平台-kibana

    1. 场景描述 elasticsearch部署完成后,es官方提供了可视化.分析及管理平台-kibana,部署下,有需要朋友参考下,不谢! 2. 解决方案 2.1 下载 (1)地址:https://w ...

  8. 申请elasticsearch中x-pack插件许可证及授权

    前提:         ES主机中elasticsearch x-pack插件许可证申请使用期限为1年,到期后x-pack插件将不再可用,重启elasticsearch服务后日志会提示一下警告,如图所 ...

  9. test_HTMLTestRunnerCN.py

    代码如下: from calculator import Count import unittest import HTMLTestRunnerCN #测试两个整数相加 class TestAdd(u ...

  10. css3 文本控制自动换行

    text-overflow:ellipsis; white-space:nowrap; overflow:hidden;