如何使用Xapian进行数据写入和查找
来源:互联网 发布:北大方正软件技术学院 编辑:程序博客网 时间:2024/06/06 20:04
数据写入
//首先建立db对象Xapian::WritableDatabase* db; 首先建立可写入的xapian格式的数据库//建立一个string类型的字符串string para;//在运用时首先在构造函数中创建对象db = new Xapian::WritableDatabase(Index_dir, Xapian::DB_CREATE_OR_OPEN);//其中index_dir是存储目录,xapian存储的地方是一个文件夹,后面的参数为xapian自带参数//进行数据写入 Xapian::Document doc;Xapian::TermGenerator indexer;//把一个含有多个字段的结构数值进行拼装,用到最初的para字符串,log是一个结构para = log.cmd + " " + log.cmd_string + " " + log.conn_time + " "+ log.post_param + " " + log.probe_id + " " + log.cookie + " "+ log.sip + " " + log.sport;//设定主数据,该数据可以被多个关键字进行标识doc.set_data(para);//构建关键字,属于精确匹配的范围,add_term用于建立模糊查询的关键字doc.add_value(1, log.cmd);doc.add_value(2, log.conn_time);doc.add_value(3, log.post_param);doc.add_value(4, log.probe_id);doc.add_value(5, log.sip);doc.add_value(6, log.sport);doc.add_value(7, log.cookie);doc.add_value(8, log.cmd_string);//建立索引信息indexer.set_document(doc);indexer.index_text(para);//把文件添加到数据库中db->add_document(doc);
数据查找
//首先要设置过滤条件,这里设定一个结构类型的过滤器filter f;//filter是一个结构类型f.cmd = temp[0];f.probeid = temp[1];f.post_parm = temp[2];f.starttime = temp[3];f.endtime = temp[4];f.ip = temp[5];f.port = temp[6];f.perpage = atoi(temp[7].c_str());f.page = atoi(temp[8].c_str());f.word = temp[9];//建立一个容器,用来存放查询得到的数据std::vector<sqllog> list; //sqllog也是一个结构类型,显示查询的信息//下面是使用xapian进行查询Xapian::Database outDB(Index_dir);//文件所在路径的数据库Xapian::Enquire enquire(outDB);//建立查询位置string query_string;//查询字符串query_string = f.word;//设定查询字符串//建立查询分析Xapian::QueryParser qp;//设定查询数据库qp.set_database(outDB);//设置查询策略 有NONE,SOME,ALL三种,具体看参考文档docs/apidoc/html/classXapian_1_1QueryParser.htmlqp.set_stemming_strategy(Xapian::QueryParser::STEM_SOME);//生成查询条件Xapian::Query query;//提交查询关键字query = qp.parse_query(query_string);//以下进行查询Xapian::Query queryCmd = Xapian::Query(Xapian::Query::OP_VALUE_RANGE, 1, f.cmd, f.cmd);Xapian::Query queryProbeid = Xapian::Query(Xapian::Query::OP_VALUE_RANGE, 4, f.probeid, f.probeid);Xapian::Query queryPostparam = Xapian::Query(Xapian::Query::OP_VALUE_RANGE, 3, f.post_parm, f.post_parm);Xapian::Query queryLogtime = Xapian::Query(Xapian::Query::OP_VALUE_RANGE, 2, f.starttime, f.endtime);Xapian::Query queryIp = Xapian::Query(Xapian::Query::OP_VALUE_RANGE, 5,f.ip, f.ip);Xapian::Query queryPort = Xapian::Query(Xapian::Query::OP_VALUE_RANGE,6, f.port, f.port);//产生组合查询条件Xapian::Query lastQuery;lastQuery = query;//关键字//设置组合条件lastQuery = Xapian::Query(Xapian::Query::OP_AND, lastQuery,queryLogtime);lastQuery= Xapian::Query(Xapian::Query::OP_AND, lastQuery, queryIp);lastQuery = Xapian::Query(Xapian::Query::OP_AND, lastQuery,queryPostparam);lastQuery = Xapian::Query(Xapian::Query::OP_AND, lastQuery,queryCmd);enquire.set_query(lastQuery);//返回查找到得集合Xapian::MSet matchesAll = enquire.get_mset(0, outDB.get_doccount());//循环进行值查找,slrank是一个结构数组for (Xapian::MSetIterator i = matchesAll.begin(); i != matchesAll.end(); ++i){slrank[k].cmd = i.get_document().get_value(1);slrank[k].conn_time = i.get_document().get_value(2);slrank[k].post_param = i.get_document().get_value(3);slrank[k].probe_id = i.get_document().get_value(4);slrank[k].sip = i.get_document().get_value(5);slrank[k].sport = i.get_document().get_value(6);slrank[k].cookie = i.get_document().get_value(7);slrank[k].cmd_string = i.get_document().get_value(8);//把值返回到list中,以后值需要调用list容器即可list.push_back(slrank[k]);k++;}
- 如何使用Xapian进行数据写入和查找
- 如何将后台死数据写入本地进行读取
- 如何使用C#和ADO.NET在SQL Server数据库读取和写入blob数据
- VIM中如何进行查找和替换
- 如何使用 DataView 进行数据排序和检索
- 如何使用JavaScript和正则表达式进行数据验证
- 如何使用JavaScript和正则表达式进行数据验证
- 如何使用JavaScript和正则表达式进行数据验证
- JAVA 如何使用 MD5 和SHA1进行数据加密
- 如何使用JavaScript和正则表达式进行数据验证
- Java使用URLConnection写入和读取数据
- Xapian ( Python ) 之 TermGenerator 的简单理解和使用示例
- xapian安装使用
- xapian的使用
- Oracle中如何读取和写入二进制数据
- Hadoop集群配置中如何写入和读取数据?
- Hybrid:Android 中如何获取和写入 H5 localStorage 数据
- 使用SharedPreference写入数据
- C# 实现桌面图片飘浮效果
- 在linux下进行编码格式转换
- 单例模式
- fedora15 装nvidia驱动,关闭 Xwindows,
- 最受欢迎的网站 (转载)
- 如何使用Xapian进行数据写入和查找
- 关于资料下载
- mysql自身乱码问题之解决
- ARM硬件支持java技术Jazelle DBX
- oracle 语句大全
- 用C#写MSN机器人
- PHP中刷新输出缓冲详解
- ubuntu无法登陆问题解决
- 9棵树种成9行,每一行都是3棵,怎么种?