由于项目需要,在使用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()就可以了
分享到:
相关推荐
爬取裁判文书网对docID解码用到的js function Navi(id, str_key) { var unzipid = unzip(id); // var realid = com.str.Decrypt(unzipid); var realid = com.str.Decrypt(unzipid,str_key); return realid } ...
资源分类:Python库 所属语言:Python 资源全名:os-docid-0.4.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
3. **文本索引**:使用固定长度的ISAM(索引序列访问模式)对文档信息进行排序,索引按docID排列。每个索引条目包含文本状态、信息库指针、文本校验值和统计信息。通过这种方式,数据紧凑且搜索效率高。此外,还有一...
本文将深入探讨如何使用Java实现一个简单的倒排索引表,并结合布尔查询进行文本搜索。 首先,我们需要理解倒排索引的基本概念。倒排索引是从词到文档的映射,即它将每个词关联到包含该词的所有文档的列表。这种索引...
6. **分页与分块检索**:对于大量结果,可以使用 TopDocs 分页,或者使用 BlockJoin 查询来实现相关性排序下的子文档分组。 7. **实时索引**:通过使用近实时搜索,Lucene 允许在索引更新后短时间内进行搜索。 8. ...
HAL驱动层包括了一套完整的、可以立即使用的APIs,简化了用户应用程序的实现。以通信外设为例,它包含了用于初始化和配置外设、基于轮询的数据传输管理、中断或DMA处理以及通信错误管理的APIs。 HAL驱动层的APIs...
- 搜索单个关键词,返回命中结果,计算得分并按得分排序; - 支持两个关键词的与或查询,同样计算得分并排序; - 完成包含两个相邻单词的短语检索。 2. 额外要求 - 自动读取文件并搜索输出所有单词; - 实现倒...
本文将深入探讨如何使用SQLite实现新闻收藏和取消收藏的功能。 首先,SQLite是一个轻量级的、嵌入式的数据库系统,适用于Android和iOS等移动平台。它的优势在于不需要独立的服务器进程,而是直接集成到应用中,减少...
本资源仅为借鉴,在淘宝小程序中使用,建议使用 白鹭引擎、LayaAir、pixi 等。 淘宝小程序文档连接:https://miniapp.open.taobao.com/docV3.htm?docId=119178&docType=1&tag=dev 本资源是专门为淘宝小程序所开发的...
### 利用ASP.NET和ActiveX技术实现Word文档的在线编辑 #### 摘要 本文探讨了如何在Web环境中利用ASP.NET与ActiveX技术实现Word文档的在线编辑功能。传统方式下,用户需手动下载文档至本地进行编辑后再上传至服务器...
另外,Google可能使用了独特的排序算法“PageRank”来对搜索结果进行排序,这是Google创始人拉里·佩奇和谢尔盖·布林所发明的算法,用于评估网页的重要性。 6. 搜索算法流程 文档中还概述了搜索算法的六个步骤,从...
4. **预加载机制**:使用定时器来预先加载后续页面的数据,从而实现无缝滚动效果。 ```actionscript this._delayPreLoadID = setInterval(this.preLoad, 1000, _loc_3); ``` #### 四、百度文库浏览器参数分析 ...
这是使用(VSM)进行分级检索的索引和搜索技术的Python实现。 具体而言,为向量空间评分实现了加权方案。 对于余弦值的计算,由于不影响查询文档之间的相对余弦分数关系,因此有意将查询向量长度的归一化作为优化...
这种“三维”的数据模型检索服务通过定义了一种增强的BNF语法,使得用户可以使用类似SQL的语句来指定检索条件,如内容包含特定关键词、时间范围和地理位置。 在全文检索系统的设计中,首先从文档源获取文档,然后...
在实现从相册中选择照片功能时,还需要考虑到其他方法的使用,例如使用 `ContentResolver` 来获取图片的路径等。 实现从相册中选择照片功能需要权限配置、点击事件绑定、相册访问、根据路径设置图片等步骤。通过...
它采用了固定长度的ISAM(Indexed Sequential Access Method,索引顺序存取方法)索引,并按文档标识号(DocID)进行排序。索引条目记录了文档的状态、校验和位置等信息。对于已抓取的文档,索引条目中的Other ...
本示例将深入探讨如何使用Struts2框架来实现图片上传和文档下载功能,这两个功能是Web应用中常见的需求。 首先,让我们了解上传功能。在Struts2中,图片上传通常涉及以下步骤: 1. **创建上传表单**:在HTML页面上...
- **更新文档**:使用`PUT /api/v2/repos/{repoId}/docs/{docId}`接口,通过指定文档ID修改内容。 - **读取文档**:使用`GET /api/v2/repos/{repoId}/docs/{docId}`接口,获取指定文档的详细信息。 3. **版本控制...
远程调用用友EAI接口是企业信息化集成中常见的技术操作,主要目的是实现不同系统间的交互和数据交换。本文将详细介绍如何通过实例进行远程调用用友EAI接口。 首先,确保可以正确访问EAI接口地址。在本例中,接口的...