• kingso_sort


    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排序对象。

  • 相关阅读:
    SQL语句常见优化方法
    MySql索引
    Zookeeper学习记录(一):设计与实现
    linux下修改防火墙端口对外开放方法
    Kafka的Producer以及Consumer远程调用问题
    kafka与Spring的集成
    Kafka在Linux环境下搭建过程
    kafka-分布式消息系统
    打字母的游戏&Java入门
    SVN流程图协作图
  • 原文地址:https://www.cnblogs.com/lexus/p/3542920.html
Copyright © 2020-2023  润新知