`
Tonyguxu
  • 浏览: 271705 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【工作】日志检索结果的排序改进分析

 
阅读更多

 

 

下图是现在生产环境的部署图,索引文件分布在70-73服务器上,这4台服务器在一个集群里,每个节点的

search service会查询该节点上的索引文件(阶段1),然后在71或者72服务器的query client service里获得汇合后的数据(阶段2)。

 

阶段1和阶段2都有排序,其中阶段1的排序可以基于Lucene的排序机制来完成,阶段2的排序可以通过相关排序算法完成(比如Arrays.sort(hitdoc[]))。

 

当前,阶段1的排序是根据相关性打分来排序,阶段2的排序是根据将阶段1的产生的结果的打分(对原始相关性打分做了改造:(int)score * 100)排序,并且阶段2待排序的是各个节点汇总后的数据,阶段2的排序结果将最终展示给用户。

 

如果,想要对结果根据时间, 分数+时间, 分数 来排序,该如何实现?

 

按照 分数 排序

 

Arrays.sort(hits, new Comparator<SearchHit>() {

	                    @Override
	                    public int compare(SearchHit o1, SearchHit o2) {
	                        return o1.getScore() - o2.getScore();
	                    }
   });
 

按照 时间 排序

 

Arrays.sort(hits, new Comparator<SearchHit>() {

                        @Override
                        public int compare(SearchHit doc1, SearchHit doc2) {
                            return (int) (doc1.getTime() - doc2.getTime());
                        }
   });
 

按照 分数+时间(先按分数排序,分数相同的结果按照时间排序)

 

 

Arrays.sort(hits, new Comparator<SearchHit>() {

                        @Override
                        public int compare(SearchHit doc1, SearchHit doc2) {
                            return (doc1.getScore() != doc2.getScore()) ? -(doc1.getScore() - doc2.getScore()) : (int) (doc1.getTime() - doc2.getTime());
                        }
                    });
 

 

 

按照 时间+分数 排序(先按时间排序,时间相同的结果按照分数排序)

 

 

Arrays.sort(hits, new Comparator<SearchHit>() {

                        @Override
                        public int compare(SearchHit doc1, SearchHit doc2) {
                            return (doc1.getTime() != doc2.getTime()) ? (int) (doc1.getTime() - doc2.getTime()): -(doc1.getScore() - doc2.getScore());
                        }
                    });
 

 

尽管对单个节点上的结果进行排序不影响最终给用户的显示(反而会影响性能),如果想要对单节点上数据排序,可以通过如下方式

 

按时间降序排序

 

 

//If true, then scores are returned for every matching document in //TopFieldDocs.
boolean doTrackScores = true;
boolean doMaxScore = false;
indexSearch.setDefaultFieldSortScoring(doTrackScores , doMaxScore);
Sort sort = new Sort(new SortField("time", SortField.STRING, true));
TopDocs docs = searcher.search(request.getQuery(), null, maxResultSize, sort);
 

 

Sort/SortField/FieldCache

  • 大小: 50.1 KB
分享到:
评论

相关推荐

    人力资源管理软件(完全免费)

    考勤台帐管理支持按计算结果和处理结果分别检索 2008-03-16 人力资源管理软件发布1.3版本,做了以下改进 增加按公司分类统计的工资报表(感谢蓝血人) 单据界面上增加了打印按钮(感谢中秋月) 人力资源管理软件...

    【TinyShop电子商务系统 V3.1.1 】商品列表可按多种方式排序+支持插件式支付方式

    订单统计、热销商品统计、地区销售统计、会员注册统计多维度的分析产品的销售情况,让您更好的去改进自己的经营策略,快速找到一个适合自己的赚钱方式。 安全、高效、稳定内核 TinyShop内核(Tiny)是在多年的开发...

    数据库系统实现

    6.5.6 简单排序连接的分析 6.5.7 一种更有效的基于排序的连接 6.5.8 基于排序的算法小结 习题 6.6 基于散列的两趟算法 6.6.1 通过散列划分关系 6.6.2 基于散列的消除重复算法 6.6.3 基于散列的分组和...

    阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx

    在注释中用FIXME标记某代码虽然实现了功能,但是实现的方法有待商榷,希望将来能改进 D .在注释中用FIXME标记某代码是错误的,而且不能工作,需要及时纠正的情况 多选 17.关于MySQL性能优化的描述,下列哪些说法...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     17.1.7 对查询结果排序  17.1.8 分页查询  17.1.9 检索单个对象(uniqueResult()方法)  17.1.10 按主键逐个处理查询结果(iterate()方法)  17.1.11 可滚动的结果集  17.1.12 在HQL查询语句中绑定参数  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     17.1.7 对查询结果排序  17.1.8 分页查询  17.1.9 检索单个对象(uniqueResult()方法)  17.1.10 按主键逐个处理查询结果(iterate()方法)  17.1.11 可滚动的结果集  17.1.12 在HQL查询语句中绑定参数  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     17.1.7 对查询结果排序  17.1.8 分页查询  17.1.9 检索单个对象(uniqueResult()方法)  17.1.10 按主键逐个处理查询结果(iterate()方法)  17.1.11 可滚动的结果集  17.1.12 在HQL查询语句中绑定参数  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     17.1.7 对查询结果排序  17.1.8 分页查询  17.1.9 检索单个对象(uniqueResult()方法)  17.1.10 按主键逐个处理查询结果(iterate()方法)  17.1.11 可滚动的结果集  17.1.12 在HQL查询语句中绑定参数  ...

    自己动手写搜索引擎(罗刚著).doc

    7.3.4 搜索结果排序 188 7.3.5 搜索页面的索引缓存与更新 190 7.4 实现关键词高亮显示 191 7.5 实现多维视图 194 7.6 实现相似文档搜索 200 7.7 实现AJAX自动完成 203 7.7.1 总体结构 203 7.7.2 服务器端处理 203 ...

    博易博客 多用户博客程序

    日志检索 Yes. 这可能是迄今最强大的博客搜索功能了 评论检索 Yes. 检索范围可以包含评论内容 用户自定义控件挂接 Yes. 任何用户控件 (.ascx) 都可以挂接到日志中 联系作者 Yes 评论开关 Yes. 管理员可以设定...

    单位活动现场管理系统 v1.0.rar

    8. 检索与查询:支持评分结果在线检索,支持全部活动结果分类汇总显示。 (五)唱票计票功能 可以对选举现场的唱票计票工作进行过程管理,可应用于差额选举和等额选举,在记录候选人票数以外还可以记录非候选人票、...

    单位活动现场管理系统

    8. 检索与查询:支持评分结果在线检索,支持全部活动结果分类汇总显示。 (五)唱票计票功能 可以对选举现场的唱票计票工作进行过程管理,可应用于差额选举和等额选举,在记录候选人票数以外还可以记录非候选人票...

    试论基于ASP. NET的教学服务门户系统设计与开发

    并对系统中各类资源的用户点击率和资源下载率进行自动统计,利用这些统计数字,对各资源的被利用率进行排序,以便采取措施来改进设计,更好地为用户服务。主观测评主要是通过用户调查、意见反馈等形式从用户处获得...

    收获不知Oracle

    6.2.4 各类连接排序情况分析 347 6.2.4.1 除嵌套循环都需排序 347 6.2.4.2 排序只需取部分字段 347 6.2.4.3 关于排序的经典案例 349 6.2.5 各类连接限制场景对比 350 6.2.5.1 哈希连接的限制 350 6.2.5.2 排序合并的...

    Zabbix v3.4.5.zip

    [ZBX-13176]在历史管理器(vjaceslavs)中修复了最后一项值检索错误; [ZBX-12856]在触发编辑窗体(gcalenko)中添加相关触发器时; [ZBX-13024]修正了没有输入参数(Sasha)的URL解析“请求”; [ZBX-13153]修复了在...

    Steam Piggy Bank-crx插件

    语言:English 快速了解Steam的当前销售情况 ...变更日志:1.4.9.1 *更改了滚动条样式*正确识别了包1.4.9 *改进了面板模式1.4.8 *折扣排序的次要修复1.4.7 *引入了面板视图:在您的浏览器中访问chrome:// flags /#e

Global site tag (gtag.js) - Google Analytics