kingso_sort - Taocode
如何编写新sort
由于排序逻辑多种多样,kingso的排序设计成是由一个个排序对象串起的排序链条组成。排序对象之间可以任意组合(只需要改配置文件),就可以满足不同应用的排序需求。
下面就以SampleSort为例,来说明如何编写新的sort对象:
编写SampleSort对象
sort对象都要继承自SortModeBase
class SampleSort : public SortModeBase {
public:
SampleSort () {}
virtual ~SampleSort () {}
sort对象初始化方法,只会运行一次,一般用于读取配置中的内容
virtual int init(mxml_node_t* xNode, SortOperate* pOperate) {
if (xNode == NULL) {
return -1;
}
return 0;
}
sort对象预处理方法,每次查询都会调用,一般用于解析查询语句中的特定参数
virtual int prepare(SDM* pSDM) {
if (!_pCompareInfo)
return -1;
return 0;
}
sort对象处理方法,每次查询都会调用,算分、排序都会在这里进行
virtual int process(SDM* pSDM, sort_framework::SortQuery* pQuery,
SearchResult *pResult, MemPool *mempool)
{
if (pResult == NULL) {
return 0;
}
获取比较对象
SortCompare* pCompare; if (!(pCompare = pSDM->GetCmp(_pCompareInfo))) {
TLOG("Get Compare error");
return -1;
}
添加并读取加分字段
SDM_ROW *pAddRow = pSDM->AddProfRow("addweight"); if (pAddRow == NULL) {
return -1;
} if (!pAddRow->isLoad()) {
pAddRow->Load();
}
获取第一排序字段
SDM_ROW *pPSRow = pCompare->getRow(0); if (pPSRow == NULL) {
return -1;
}
修改第一排序分数
for (int32_t i=0; i<pPSRow->getDocNum(); i++) {
pPSRow->Add(i, pAddRow->Get(i));
}
return 0;
}
注册SampleSort对象
在AppManage.cpp的CreateModule方法添加:
if (strcasecmp("SampleSort",pModeName) == 0){
pret = new SampleSort;
}
修改sort配置文件
searcher_sort.xml:
<application name="SampleSort" type="SampleSort" compare="COMPARE1">
<condition type="param" name="samplesort" value="yes" />
</application> <application name="HeapSort" type="HeapSort" final="true" compare="COMPARE1">
<condition type="param" name="*" />
</application>
merger_sort.xml:
<application name="SampleSort" type="SampleSort" compare="COMPARE1">
<condition type="param" name="samplesort" value="yes" />
</application> <application name="HeapSort" type="HeapSort" final="true" compare="COMPARE1">
<condition type="param" name="*" />
</application>
如上配置,当query中含有samplesort=yes时,查询就会依次经过SampleSort和HeapSort排序对象。
kingso_sort - Taocode的更多相关文章
- kingso_module - Taocode
kingso_module - Taocode 模块介绍 Merger 功能介绍 Merger的功能: 合并多台Searcher机器的部分查询结果,得到最终的完整查询结果 向Detail集群请求最终展 ...
- kingso - / - Taocode
kingso - / - Taocode 这两天在线下搭建了kingso示例服务,有兴趣的同学请自取. 源代码位置:192.168.201.73:9022 /home/wcm/kingso 安 ...
- 使用Myeclipse + SVN + TaoCode 免费实现项目版本控制的详细教程
通过Myeclipse + SVN插件 + TaoCOde可以省去代码仓库的租建:同时还可以很好的满足小团队之间敏捷开发的需求.接下来详细介绍整个搭建流程. 首先,介绍所用到的工具: 1,Myecli ...
- taocode
http://code.taobao.org/project/lang/list/Go/1/
- eclipse安装svn进行版本控制
1)通过help->installsoft->svn->add 填入http://subclipse.tigris.org/update_1.8.x 选择这两个,等其下载 2)配置一 ...
- 淘宝code—— 最给力的国内免费SVN(不限语言),异地团队开发、打造个人开源项目不再是梦
相信大家都听说过GitHub,也有很多人在用,但是GitHub毕竟在国外,速度不是很给力,而且安装过程也是很漫长.今天来给大家介绍一个国内的免费的开源项目平台,当然也是一个SVN版本控制器,名字叫ta ...
- GitHub & Bitbucket & GitLab & Coding 的对比分析
目前基于 Git 做版本控制的代码托管平台有很多种,比较流行的服务有 Github.Bitbucket. GitLab. Coding,他们各自有什么特点,个人使用者和开发团队又该如何选择? 在这篇文 ...
- 关于TbSchedule任务调度管理框架的整合部署
一.前言 任务调度管理作为基础架构通常会出现于我们的业务系统中,目的是让各种任务能够按计划有序执行.比如定时给用户发送邮件.将数据表中的数据同步到另一个数据表都是一个任务,这些相对耗时的操作通过任务调 ...
- 笔者带你剖析淘宝TDDL(TAOBAO DISTRIBUTE DATA LAYER)
注:本文部分内容引用本人博客http://gao-xianglong.iteye.com/blog/1973591 前言 在开始讲解淘宝的TDDL(Taobao Distribute Data L ...
随机推荐
- Qt之界面美化输入框(使用QSS确实非同凡响)
我们先看下酷狗音乐的输入框效果图: 这里我们需要实现在输入框里面添加一个按钮(多个也一样),并且提供一个默认时候的文字..直接上代码好了. QHBoxLayout *lay = new QHBoxLa ...
- 部署vc2008开发的程序(vcredist_x86是其中一个办法)
如果你编译了一个VC2008的默认的CRT/MFC的应用程序,如果目标部署电脑上没有安装相应的VC2008的动态库,当运行你的程序的时 个,会出现如下错误信息. 这是因为程序使用了基于VC2008 ...
- Hello China操作系统STM32移植指南(二)
移植步骤详解 下面就以MDK 4.72为开发环境,详细说明Hello China内核向STM32的移植过程.MDK 4.72评估版只支持32K代码的编译,这对Hello China的内核来说,裁剪掉一 ...
- [转]chrome技术文档列表
chrome窗口焦点管理系统 http://www.douban.com/note/32607279/ chrome之TabContents http://www.douban.com/note/32 ...
- Flex疑难小杂症
本文主要解决Flex中一些小问题,收集一些小技巧(来自网络及个人经验) flex自动换行问题 有时候由于label .button等控件中需要用到text属性显示出文本,文本太长就涉及到换行问题,解 ...
- Python学习入门基础教程(learning Python)--2.2 Python下的变量基础
变量的基本概念,变量可以这样去理解,变量是一个值,这个值存储在计算机的内存里.以网购为例,您在选购傻商品的时候,是在不同页面里选不同的商品,选好一件点击“放入购物车”,选完了再点击去结帐,这些商品的价 ...
- CentOS, 高速设置ssh无password登录
首先.保证能够ping通 然后运行例如以下命令, master登录slave master上面运行例如以下指令: 2.4 确认本机sshd的配置文件(root) $ vi/etc/ssh/sshd_c ...
- MYSQL大小写(由于数据由windows迁移到Linux导致)
今日从sqlserver上迁移了一个数据库到Linux的MySQL中,迁移成功了,但是应用却跑不通,查看日志发现,提示找不到表,我注意到,表名都是存在大小写的,而MySQL中的表名都是小写的.这提醒了 ...
- Windows 无法启动xx服务 错误1053:服务没有及时响应启动或控制请求
症状:win7系统的很多系统关键服务,启动不了,双击该服务也弹不了操作框,系统服务是设置为自动 的,但是就是启动不了,在本地服务窗口中只能启动该服务,但是双击会弹不了窗口,你点启动后会出现错误提示10 ...
- 【Linux命令】查找命令
如果你想在当前目录下 查找"hello,world!"字符串,可以这样: grep -rn "hello,world!" *