发表回复 
 
主题评价:
  • 0 次(票) - 平均星级: 0
  • 1
  • 2
  • 3
  • 4
  • 5
增加真正按docid排序的建议
2016年06月30日, 14:50 (这个帖子最后修改于: 2016年06月30日 14:54 by dongtest.)
增加真正按docid排序的建议
在xunsearch中我没有找到按docid排序的实现
现有的setDocOrder 并不是真正按docid排序的
但是xapian的doc里有介绍按docid排序的实现方法
按它的说法,用docid排序比按时间排序效率要好

[quote]
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.
[/quote]

我现在的做法是修改task.cc源码
PHP 代码:
if (type == CMD_SORT_TYPE_DOCID) {
    
zarg->eq->set_docid_order(reverse Xapian::Enquire::DESCENDING Xapian::Enquire::ASCENDING);

修改为
PHP 代码:
if (type == CMD_SORT_TYPE_DOCID) {
    
zarg->eq->set_docid_order(reverse Xapian::Enquire::DESCENDING Xapian::Enquire::ASCENDING);
}
elseif (
type == CMD_SORT_TYPE_ID) {
    
zarg->eq->set_weighting_scheme(Xapian::BoolWeight());
    
zarg->eq->set_docid_order(reverse Xapian::Enquire::DESCENDING Xapian::Enquire::ASCENDING);

然后在XS.php中添加与CMD_SORT_TYPE_ID对应的函数
比如setIdOrder
搜索的时候 调用 setIdOrder 就实现了按docid排序
希望下一版本添加此功能,实现上不是很难
查找这个用户的全部帖子
引用并回复
发表回复 


论坛跳转:


正在浏览该主题的用户: 1 个游客