xapian安装使用

官方网站:http://xapian.org/


xapian 作为全文搜索引擎,分为三大模块:indexer(索引) databases(数据库管理) searcher(搜索)

包含在以下类:

xapian::WriteDatabase
xapian::document
xapian::database
xapian::enquire
xapian::query
xapian::mset

中文分词:libmmseg scws

1、安装

wget http://oligarchy.co.uk/xapian/1.2.12/xapian-core-1.2.12.tar.gz
tar -zxvf xapian-core-1.2.12.tar.gz
cd xapian-core-1.2.12
./configure  --prefix=/opt/xapian
make
make install

安装语言包,现在是安装php的:

wget http://oligarchy.co.uk/xapian/1.2.12/xapian-bindings-1.2.12.tar.gz
tar -zxvf xapian-bindings-1.2.12.tar.gz
cd xapian-bindings-1.2.12
./configure --prefix=/opt/xapian-binding XAPIAN_CONFIG=/opt/xapian/bin/xapian-config --with-php PHP_CONFIG=/usr/local/webserver/php/bin/php-config
make && make install

文件说明:

/bin/copydatabase		拷贝数据库			eg:./copydatabase /opt/xapian/db/test.db/ /opt/xapian/db/test.db2
/bin/quest			搜索命令			eg:./quest -d /opt/xapian/db/test.db/ -m 10 "中国"
/bin/simpleindex		产生简单的索引库
/bin/xapian-check		xapian数据库检查
/bin/xapian-compact		优化数据库,合并数据库
/bin/xapian-replicate		从服务器拉起		eg:./xapian-replicate -h 127.0.0.1 -p 99 -m test.db replicate.db
/bin/xapian-replicate-server	主从服务器	eg:./xapian-replicate-server -p 99 /opt/xapian/db/
/bin/delve			查看xapian数据库相关情况,如总共多少条记录,或分词的信息等. eg:./delve -d /opt/xapian/db/test.db
/bin/simplesearch		简单的搜索,很方便 eg:./simplesearch /opt/xapian/db/test.db "中国"
/bin/xapian-config	        xapian的相关配置情况
/bin/xapian-progsrv 		远程索引。 eg:Xapian::Database database(Xapian::Remote::open("ssh", "search xapian-progsrv /opt/xapian/db/test.db"));
/bing/xapian-tcpsrv		远程索引TCP_IP方式。 eg:Xapian::Database database(Xapian::Remote::open("searchserver", 99));


一个文档(Document)有三部分组成,数据(data),词集(terms),值域集(values)
索引限制:


一下是索引数据的一些限制:
Term Length:一个词限制在256个字节内,
Document Data:一个data区不能大于100MB,默认是8KB
Document value:和一个data区的限制是一样的,但一般建议value不要太大
Document ID: 当前范围是32bit,大概在43亿左右,文档删除的ID号不会被重新利用,除非你对数据库进行compact
B-tree block number: 目前支持最大为32bit个块
OS file size:所有操作系统对于单个文档的限制对于Xapian都适用,如ext4对于单个文件的大小为16TB,
Document length:文档长度的存储限制为unsigned 64bit


使用:


添加文档:

Xapian::WritableDatabase db("/opt/xapian/db/test.db", Xapian::DB_CREATE_OR_OPEN);

Xapian::TermGenerator indexer;
Xapian::Stem stemer("english");
indexer.set_stemmer(stemer);

string line = "我是中国人,by:农夫";

Xapian::Document doc;
doc.set_data(line);
indexer.set_document(doc);		
indexer.index_text("我 是 中国人 农夫");		//设置分词,以空格分开 

db.add_document(doc);					//添加文档
db.commit();


搜索:

Xapian::Database db("/opt/xapian/db/test.db");

Xapian::Enquire enquire(db);

string query_string = "中国人";
Xapian::QueryParser qp;
Xapian::Stem stemmer("english");
qp.set_stemmer(stemmer);
qp.set_database(db);
qp.set_stemming_strategy(Xapian::QueryParser::STEM_NONE);
Xapian::Query query = qp.parse_query(query_string);


cout << "Parsed query is: " << query.get_description() << endl;

enquire.set_query(query);
// 得到查询结果
Xapian::MSet matches = enquire.get_mset(0, 10);

// Display the results.
cout << matches.get_matches_estimated() << " results found.\n";
cout << "Matches 1-" << matches.size() << ":\n" << endl;


// 得到查询结果
for (Xapian::MSetIterator i = matches.begin(); i != matches.end(); ++i) {
cout << i.get_rank() + 1 << ": " << i.get_percent() << "% docid=" << *i
     << " [" << i.get_document().get_data() << "]\n\n";
}


删除文档:

Xapian::WritableDatabase db("/opt/xapian/db/test.db", Xapian::DB_CREATE_OR_OPEN);

db.delete_document("农夫");		//以检索词删除文档

db.commit();
cout<<"ok"<<endl;
exit(0);


Query
如果不想使用字符串形式的查询表达式,可以用下面这些操作符将多个Query组合起来:
OP_AND 
等同于QueryParser所支持的AND
OP_OR 
等同于QueryParser所支持的OR
OP_AND_NOT 
等同于QueryParser所支持的AND_NOT
OP_XOR 
等同于QueryParser所支持的XOR
OP_AND_MAYBE 
只返回左边子表达式匹配的documents,不过两边的表达式所匹配的documents都加入权重计算。
OP_FILTER 
作用跟AND相似,不过仅仅左边的表达式匹配的documents才加入权重计算。
OP_NEAR 
等同于QueryParser所支持的NEAR
OP_PHRASE 
等同于QueryParser所支持的ADJ
OP_VALUE_RANGE 
等同于QueryParser所支持的范围搜索
OP_SCALE_WEIGHT 
给子表达式指定权重,如果权重为0,则此表达式为纯布尔型查询
OP_ELITE_SET 
作用跟OP_OR 很相似,不过有时候性能比OP_OR 要好。这里有详细的解释:http://trac.xapian.org/wiki/FAQ/EliteSet
OP_VALUE_GE 
返回大于或等于给定的document value
OP_VALUE_LE 
返回小于或等于给定的document value

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python Xapian(简称xapian)是一个用于全文搜索和信息检索的开源工具库。它提供了Python语言的接口,使得我们可以方便地在Python环境中使用xapian的功能。 xapian是一种基于倒排索引的搜索引擎。它的主要特点是快速、可扩展,以及支持多种语言。我们可以利用xapian来创建和维护一个倒排索引库,然后在这个库上进行全文搜索和信息检索。 使用xapian,我们可以将一个文本集合中的文档添加到索引库中。这个索引库可以包含多个字段,每个字段可以是不同的文本类型(例如标题、正文、作者等)。然后,我们可以使用查询语句在这个索引库中进行搜索。xapian支持多种查询类型,例如布尔查询、短语查询、通配符查询等。 除了基本的全文搜索,xapian还提供了一些高级功能。例如,我们可以使用xapian来计算查询和文档之间的相关性得分,从而对搜索结果进行排序。xapian还支持结果分页、结果高亮显示等功能,使得搜索结果更易于阅读和理解。 使用Python Xapian,我们可以在Python程序中轻松地集成全文搜索和信息检索功能。它可以应用于各种场景,例如网站搜索引擎、文档管理系统、邮件分类等。通过合理使用xapian的功能,我们可以帮助用户快速准确地找到他们所需的信息,提高用户体验和效率。 总之,Python Xapian是一个功能强大、易于使用的全文搜索和信息检索工具库。它提供了丰富的功能和灵活的接口,可以满足不同应用的需求。无论是初学者还是专业开发人员,都可以利用xapian来构建高效的搜索和检索系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值