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的更多相关文章

  1. kingso_module - Taocode

    kingso_module - Taocode 模块介绍 Merger 功能介绍 Merger的功能: 合并多台Searcher机器的部分查询结果,得到最终的完整查询结果 向Detail集群请求最终展 ...

  2. kingso - / - Taocode

    kingso - / - Taocode     这两天在线下搭建了kingso示例服务,有兴趣的同学请自取. 源代码位置:192.168.201.73:9022 /home/wcm/kingso 安 ...

  3. 使用Myeclipse + SVN + TaoCode 免费实现项目版本控制的详细教程

    通过Myeclipse + SVN插件 + TaoCOde可以省去代码仓库的租建:同时还可以很好的满足小团队之间敏捷开发的需求.接下来详细介绍整个搭建流程. 首先,介绍所用到的工具: 1,Myecli ...

  4. taocode

    http://code.taobao.org/project/lang/list/Go/1/

  5. eclipse安装svn进行版本控制

    1)通过help->installsoft->svn->add 填入http://subclipse.tigris.org/update_1.8.x 选择这两个,等其下载 2)配置一 ...

  6. 淘宝code—— 最给力的国内免费SVN(不限语言),异地团队开发、打造个人开源项目不再是梦

    相信大家都听说过GitHub,也有很多人在用,但是GitHub毕竟在国外,速度不是很给力,而且安装过程也是很漫长.今天来给大家介绍一个国内的免费的开源项目平台,当然也是一个SVN版本控制器,名字叫ta ...

  7. GitHub & Bitbucket & GitLab & Coding 的对比分析

    目前基于 Git 做版本控制的代码托管平台有很多种,比较流行的服务有 Github.Bitbucket. GitLab. Coding,他们各自有什么特点,个人使用者和开发团队又该如何选择? 在这篇文 ...

  8. 关于TbSchedule任务调度管理框架的整合部署

    一.前言 任务调度管理作为基础架构通常会出现于我们的业务系统中,目的是让各种任务能够按计划有序执行.比如定时给用户发送邮件.将数据表中的数据同步到另一个数据表都是一个任务,这些相对耗时的操作通过任务调 ...

  9. 笔者带你剖析淘宝TDDL(TAOBAO DISTRIBUTE DATA LAYER)

    注:本文部分内容引用本人博客http://gao-xianglong.iteye.com/blog/1973591   前言 在开始讲解淘宝的TDDL(Taobao Distribute Data L ...

随机推荐

  1. inlay检验标准

    Inlay 检验标准 检验条件及要求 正常的 40W 日光灯下距离被检物 50cm,眼睛距离被检物 30cm,与被检物呈 45 度角,目视检 使用强光灯箱透视其内部结构 适用范围 Inlay 中料 检 ...

  2. Spring学习笔记1——IOC: 尽量使用注解以及java代码(转)

    在实战中学习Spring,本系列的最终目的是完成一个实现用户注册登录功能的项目. 预想的基本流程如下: 1.用户网站注册,填写用户名.密码.email.手机号信息,后台存入数据库后返回ok.(学习IO ...

  3. QT在ui文件上建立信号操机制会不会对后期维护产生影响 - love4Mario的专栏 - 博客频道 - CSDN.NETQT在ui文件上建立信号操机制会不会对后期维护产生影响 - love4Mario的专栏 - 博客频道 - CSDN.NET

    QT在ui文件上建立信号操机制会不会对后期维护产生影响 - love4Mario的专栏 - 博客频道 - CSDN.NET QT在ui文件上建立信号操机制会不会对后期维护产生影响 分类: 学习心得 2 ...

  4. citrix协议ICA技术原理

    转载自: http://www.zrss.com.cn/article-110-1.html Citrix交付中心解决方式的核心是虚拟化技术,虚拟化计算的核心是ICA协议,ICA协议连接了执行在平台上 ...

  5. Android JNI入门第一篇——HelloJni

    android支持使用NDK开发C程序,关于配置NDK环境问题应该不用再赘述了,这个网上有很多,这里通过一篇实例来讲述简单的JNI开发,大家可以参考这篇文章(Get Your Eclipse-Inte ...

  6. ORACLE分科目统计每科前三名的学生的语句

    有个成绩表 score(student_no,Subject_no,Score)分别为学号,课程号,成绩.我想用语句查询出每科的前三名学生的学号,请各位高手教教小弟 1.创建测试语句:create t ...

  7. Html.text(转载)

    2.Html.ValidationSummary:用来显示ModelState字典中所有验证错误的无序列表,使用布尔值类型参数(true)来告知辅助方法排除属性级别的错误,只显示ModelState中 ...

  8. Aspx 页面生命周期

    ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤.这些步骤包括初始化.实例化控件.还原和维护状态.运行事件处理程序代码以及进行 呈现.了解页的生命周期非常重要,这样就 ...

  9. Java多线程之非线程安全

    在Java多线程中我会重点总结五个如下的技术点: 1.非线程安全是如何出现的 2.synchronized对象监视器为Objec时的使用 3.synchronized对象监视器为Class时的使用 4 ...

  10. Linq to sql介绍及增、删、改、查

    LinQ是指集成化查询语言,通过映射将数据库内的表名变为C#的类名,将列名作为属性名,将表的关系作为类的成员对象.O--M--R O-Object对象 R-Relation关系 M-Mapping映射 ...