c++ xapian开发 搜索-Xapian C++中的应用问题

问题描述

Xapian C++中的应用问题

create.cpp创建数据库并写数据
#include // 头文件

#include
#include

#include // For exit().
#include

using namespace std;

#define INDEX_PATH "./index_data"

int main(int argc, char **argv)
{
try
{
// 创建或者打开一个可读写的数据库
Xapian::WritableDatabase db(INDEX_PATH, Xapian::DB_CREATE_OR_OPEN);
// 分词器
Xapian::TermGenerator indexer;
string para;
int flag = 0;
while (flag++ < 8)
{
string line;
if (cin.eof())
{

if (para.empty()) break;
}
else
{
getline(cin, line);
}
if (line.empty())
{
if (!para.empty())
{
// 生成一个文档
Xapian::Document doc;
doc.set_data(para); // 定义文档数据,这些数据对于用户来说是不透明的,用户可以在这里定义文档的一些属性,或URI,路径等信息
// 设置文档,分词
indexer.set_document(doc);
indexer.index_text(para);
// Add the document to the database.
// 把文档加入数据库
db.add_document(doc);
para.resize(0);
}
}
else
{
if (!para.empty()) para += ' ';
para += line;
}
}

    db.flush();
}
catch (const Xapian::Error &e)
{
    cout << e.get_description() << endl;
    exit(1);
}

}

query.cpp查询数据库
#include
#include
#include

#include // For exit().
#include

using namespace std;

#define INDEX_PATH "./index_data"

int main(int argc, char **argv)
{
if (argc != 2)
{
cout<<"Usage:"<<argv[0]<<" QUERY_STRING"<<endl;
exit(0);
}
try
{
//打开数据库
Xapian::Database db(INDEX_PATH);
// Start an enquire session.
// 生成查询会话
Xapian::Enquire enquire(db);
string query_string(argv[1]);
Xapian::QueryParser qp;
qp.set_database(db);
qp.set_stemming_strategy(Xapian::QueryParser::STEM_SOME);
// 解析查询条件
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() << "]nn";
}
}
catch (const Xapian::Error &e)
{
cout << e.get_description() << endl;
exit(1);
}
return 0;
}

当我编译成功后运行./create
[root@localhost new]# ./create
qwe
qweqw
qweqw
qweqw
qweqw
qweqw
qweqw
qweqw
写入数据完毕
[root@localhost new]# ./query qwe
Parsed query is: Xapian::Query(qwe:(pos=1))
0 results found.
Matches 1-0:
查询的时候就是查询不到 这是为什么呢
一下是我index_data的内容
[root@localhost index_data]# ll
总计 16
-rw-r--r-- 1 root root 0 02-11 10:53 flintlock
-rw-r--r-- 1 root root 28 02-11 09:47 iamchert
-rw-r--r-- 1 root root 13 02-11 09:47 postlist.baseA
-rw-r--r-- 1 root root 0 02-11 09:47 postlist.DB
-rw-r--r-- 1 root root 13 02-11 09:47 record.baseA
-rw-r--r-- 1 root root 0 02-11 09:47 record.DB
-rw-r--r-- 1 root root 13 02-11 09:47 termlist.baseA
-rw-r--r-- 1 root root 0 02-11 09:47 termlist.DB

解决方案

http://biancheng.dnbcw.info/c/283770.html

时间: 2024-10-04 19:01:37

c++ xapian开发 搜索-Xapian C++中的应用问题的相关文章

IOS开发: 在Swift中使用AFNetworking

 今天主要简单说一下如何在Swift工程中使用时下比较流行的AFNetworking请求框架.     由于目前AFNetworking目前还没有Swift版本,因此我们的工程使用cocoapod来安装AFNetworking. 这是我的Prodfile文件,cocoapod的使用方法跟使用OC是时候是一模一样的,为了方便,我们在工程中随便创建一个类,选择语言OC,我们会发现工程中会多出来一个SwiftStudy-Bridging-Header.h文件,删除创建的oc类,在这里引入   开发:

Android开发之在程序中时时获取logcat日志信息的方法(附demo源码下载)_Android

本文实例讲述了Android开发之在程序中时时获取logcat日志信息的方法.分享给大家供大家参考,具体如下: 今天分享一个在软件开发中很实用的例子,也是这几天在通宵加班中我使用的一个小例子, 在程序中监听Log信息. 为什么说它实用?原因是Android的开发厂商各种修改之后手机和手机之间以后存在很多差异.比如说魅族M9手机 开发中如果项目中涉及到访问手机系统的地方,例如访问系统短信库,M9手机它会提示一个dialog框 让用户自己去选择 访问还是不访问.这样就给开发适配带来了巨大的麻烦.本来

Android开发笔记之Android中数据的存储方式(二)_Android

我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效率.如果学过JavaWeb的朋友,首先可能想到的是数据库.当然了数据库是一个方案,那么是否还有其他的解决方案呢?今天我们在讲下Android开发笔记之Android中数据的存储方式(一) 提到的除了SharedPreferences和Files(文本文件)以外的其他几种数据储存方式:xml文件.SQ

Android开发笔记之Android中数据的存储方式(一)_Android

对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用. 总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式:数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等:网络,则用于比较重要的事情,比如科研,勘探,航空等实时采集到的数据需要马上通过网络传输到数据处理中心进行存储并进行处理,有实时性的需求等.

搜索营销活动中的do’s和don’ts

常常有人问我,一个成功的http://www.aliyun.com/zixun/aggregation/8953.html">搜索营销活动中,有哪些事情是应该做的,又有哪些事情是不要做的.如果没有一系列的说明和假设,这个问题真的很难回答.在开展搜索营销活动中,有许多因素会发挥作用,但其中许多因素都难以控制.尽管如此,还是有一些关键的最佳方案或准则经受住了时间的考验,可以帮助你取得成功. 虽然并不详尽,但我试图将开发和运行搜索营销活动中最重要的因素都写下来.我将这些应该做的和不要做的事情按两

3G来临 移动搜索在奔跑中前进

中介交易 SEO诊断 淘宝客 云主机 技术大厅 3G时代的到来,使无线互联网呈现出爆发式的增长趋势.手机上网已逐渐成为一种主流的网络接入方式,而移动搜索作为手机上网服务的新经济模式和增长点,正在悄然流行,无线互联网更深层次的应用正在3G时代逐渐凸显出来. " 奥运期间,我在地铁里听到刘翔退赛的消息,立刻用手机登录http://yicha.cn,在搜索框里输入刘翔的名字,搜索引擎迅速列出了所有与刘翔相关 的电脑网页,我不但知道了他退赛的原因,还看到了现场的实况图片."在外企做外联工作的张

IOS开发:在Swift中使用JavaScript的方法和技巧

  在RedMonk发布的2015年1月编程语言排行榜中,Swift采纳率排名迅速飙升,从刚刚面世时的68位跃至22位,Objective-C仍然稳居TOP10,而JavaScript则凭借着其在iOS平台上原生体验优势成为了年度最火热的编程语言. 开发:在Swift中使用JavaScript的方法和技巧-"> 而早在2013年苹果发布的OS X Mavericks和iOS 7两大系统中便均已加入了JavaScriptCore框架,能够让开发者轻松.快捷.安全地使用JavaScript语言

ARM开发板上QT5 中 OSD显示的问题 具体如下

问题描述 ARM开发板上QT5 中 OSD显示的问题 具体如下 各位 ,我现在做一个视频监控类的东西,在IMX6的开发板上移植了QT5.4 用于GUI界面的显示, 然后用IMX6的/dev/vidio17作为视频的输出到fb0,现在要求视频显示在底层,GUI显示在上层,GUI的背景我设置为透明的,这样可以看到后面的视频,IMX6有两层fb0和fb1 但是现在的情况视频老是挡住GUI 我明明通过 export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb1指定输出到fb1

extern-arm开发板lcd屏幕中怎么把一个图片的颜色改变另一个颜色

问题描述 arm开发板lcd屏幕中怎么把一个图片的颜色改变另一个颜色 以下是lcd的程序,求大神指教 /************************************************************** The initial and control for 640×480 16Bpp TFT LCD----VGA **************************************************************/ #include "def.