使用xunsearch实现按docid排序

2 篇文章 0 订阅
由于项目需要,在使用xunsearch中需要按docid排序
但看了xunsearch文档api,只找到setDocOrder这个接口
但它并不能真正按docid排序,它还是按权重排序的,同权重的再按docid排序。
研究了一下xapian文章,下面是它关于按date排序的介绍
If you want to offer a "sort by date" feature, and can arrange for documents to be indexed in date order (or a close-enough approximation), then you can implement a very efficient "sort by date" feature by using a boolean search (i.e. call enquire.set_weighting_scheme(Xapian::BoolWeight());) with enquire.set_docid_order(Xapian::Enquire::DESCENDING); (for newest first) or enquire.set_docid_order(Xapian::Enquire::ASCENDING); (for oldest first). There's no inherent reason why this technique can't be used for sorting by something other than date, but it's usually much easier to arrange for new documents to arrive in date order than in other orders.
所以按docid排序是可以实现的,而且效率比按date要好
要实现真正按docid排序,只能去修改xunsearch的源码了
下载xunsearch后 ,解压软件
tar -xjf xunsearch-full-dev.tar.bz2
cd xunsearch-full-dev
cd packages
然后解压 xunsearch-1.4.10-dev.tar.bz2 这个包
tar -xjf xunsearch-1.4.10-dev.tar.bz2
然后修改里面的task.cc文件
找到这段
if (type == CMD_SORT_TYPE_DOCID) {
zarg->eq->set_docid_order(reverse ? Xapian::Enquire::DESCENDING : Xapian::Enquire::ASCENDING);
}
在下面添加
elseif (type == CMD_SORT_TYPE_DOC_ID) {
zarg->eq->set_weighting_scheme(Xapian::BoolWeight());
zarg->eq->set_docid_order(reverse ? Xapian::Enquire::DESCENDING : Xapian::Enquire::ASCENDING);
}
然后打开xs_cmd.h 添加 #define CMD_SORT_TYPE_DOC_ID 6
保存之后,打包命令tar jcvf xunsearch-1.4.10-dev.tar.bz2 xunsearch-1.4.10-dev/
然后安装xunsearch
下面修改sdk中的XS.php
添加
define('XS_CMD_SORT_TYPE_DOC_ID', 6);

然后给XSSearch添加函数
public function setIdOrder($asc = false)
{
$type = XS_CMD_SORT_TYPE_DOC_ID | ($asc ? XS_CMD_SORT_FLAG_ASCENDING : 0);
$cmd = new XSCommand(XS_CMD_SEARCH_SET_SORT, $type);
$this->execCommand($cmd);
return $this;
}
搜索的时候调用setIdOrder()就可以了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值