- 浏览: 271705 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (161)
- 【**计划】 (2)
- 【**Core Java**】 (30)
- 【**JAVA EE】 (6)
- JDBC (3)
- Hibernate专题系列 (0)
- 【**OS】 (14)
- 【**架构设计/设计模式】 (11)
- 【Hadoop】 (3)
- 【**分布式】 (9)
- 模板 (1)
- C (2)
- 常用工具 (1)
- Oracle (2)
- 【Tips】 (3)
- 【数据库】 (2)
- 玩转Ubuntu (0)
- 【计算机网络/网络编程】 (7)
- 【**Search Engine】 (21)
- 【**专题**】 (6)
- 【**Python】 (10)
- XML (1)
- 【**Open Source Framework】 (1)
- 【高级主题】 (1)
- 【存储】 (3)
- 【笔试面试】 (2)
- 【**数据结构与算法设计】 (20)
- 【其他】 (3)
- 【编程练习】 (2)
- 【待完成】 (12)
- 【工作】 (6)
- 【软件研发】 (4)
- 【**多线程多进程编程】 (5)
- 【Web Service】 (1)
- 【表达式解析/JavaCC系列】 (5)
- 【缓存系统:Memcached】 (1)
- 【Java IO/NIO】 (5)
- 【JVM运行机制及内存管理】 (7)
最新评论
-
107x:
...
python list排序 -
yuzhu223:
...
【Python基础】Python的lambda函数与排序 -
Tonyguxu:
分析查询结果的打分小于11.query=1065800715* ...
lucene打分机制的研究 -
Tonyguxu:
query=139320661963.013709 = (MA ...
lucene打分机制的研究 -
Tonyguxu:
query=10658007150.6772446 = (MA ...
lucene打分机制的研究
下图是现在生产环境的部署图,索引文件分布在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
发表评论
-
【Lucene】建索引核心类介绍
2012-06-08 17:28 1038IndexWriter 负责创建新索引或打开已有索引, ... -
优秀文章汇总
2012-05-08 18:48 723搜索引擎技术之概要预览 http://blog.csd ... -
【Lucene】lucene查询Query对象
2012-05-08 18:41 1380PrefixQuery 前缀查询。 如 test* 会匹配 ... -
【决策表管理系统】表达式解析
2012-05-07 15:50 1049由condition expression生成方法体Metho ... -
【Lucene】查询term后加上'*'对打分的影响
2012-04-25 18:14 2057BooleanWeight里sum ... -
lucene.search.Weight
2012-04-25 15:39 966org.apache.lucene.search Cl ... -
播发日志检索系统出现的系列问题
2012-04-23 14:42 761index_controller表中显示索引已经结束(f ... -
lucene.search.Similarity
2012-04-20 10:31 2514Similarity defines the componen ... -
lucene打分机制的研究
2012-04-22 17:46 5805提出问题 目前在查询时,会将得分小于1的查询结果过滤掉。 ... -
tokenize和tokenizer到底怎么翻译?
2012-03-28 10:32 3524在编写词法分析器(Lexer)或语法分析器(Parse ... -
【Lucene】更合理地使用Document和Field
2012-03-27 09:39 5398writer = ...; //#1 Prepared ... -
【Lucene】构建索引
2012-03-17 23:16 731Lucene索引的过程是什么? step1 收集待 ... -
信息检索类小程序
2012-03-17 00:37 8111.对四大名著txt实现索引和搜索功能 2. -
决策表管理系统
2012-03-15 18:46 809主题: 1.模板引擎(Velocity) 见 ... -
【Lucene】Scoring
2012-03-13 23:47 1137http://lucene.apache.org/core/o ... -
Information Retrieval
2012-03-13 22:50 974http://wiki.apache.org/lucene-j ... -
【Lucene】lucene的评分机制
2012-03-07 16:24 916测试环境里查询条件1065800714,为什么Score ... -
各个rules里代码分析
2012-03-06 10:54 734InternalChannelRule private ... -
【Lucene】搜索的核心类简介
2012-03-05 18:48 1351注:Lucene版本为3.4 I ... -
【Lucene】How to make indexing faster
2012-02-16 14:54 780http://wiki.apache.org/lucene-j ...
相关推荐
考勤台帐管理支持按计算结果和处理结果分别检索 2008-03-16 人力资源管理软件发布1.3版本,做了以下改进 增加按公司分类统计的工资报表(感谢蓝血人) 单据界面上增加了打印按钮(感谢中秋月) 人力资源管理软件...
订单统计、热销商品统计、地区销售统计、会员注册统计多维度的分析产品的销售情况,让您更好的去改进自己的经营策略,快速找到一个适合自己的赚钱方式。 安全、高效、稳定内核 TinyShop内核(Tiny)是在多年的开发...
6.5.6 简单排序连接的分析 6.5.7 一种更有效的基于排序的连接 6.5.8 基于排序的算法小结 习题 6.6 基于散列的两趟算法 6.6.1 通过散列划分关系 6.6.2 基于散列的消除重复算法 6.6.3 基于散列的分组和...
在注释中用FIXME标记某代码虽然实现了功能,但是实现的方法有待商榷,希望将来能改进 D .在注释中用FIXME标记某代码是错误的,而且不能工作,需要及时纠正的情况 多选 17.关于MySQL性能优化的描述,下列哪些说法...
17.1.7 对查询结果排序 17.1.8 分页查询 17.1.9 检索单个对象(uniqueResult()方法) 17.1.10 按主键逐个处理查询结果(iterate()方法) 17.1.11 可滚动的结果集 17.1.12 在HQL查询语句中绑定参数 ...
17.1.7 对查询结果排序 17.1.8 分页查询 17.1.9 检索单个对象(uniqueResult()方法) 17.1.10 按主键逐个处理查询结果(iterate()方法) 17.1.11 可滚动的结果集 17.1.12 在HQL查询语句中绑定参数 ...
17.1.7 对查询结果排序 17.1.8 分页查询 17.1.9 检索单个对象(uniqueResult()方法) 17.1.10 按主键逐个处理查询结果(iterate()方法) 17.1.11 可滚动的结果集 17.1.12 在HQL查询语句中绑定参数 ...
17.1.7 对查询结果排序 17.1.8 分页查询 17.1.9 检索单个对象(uniqueResult()方法) 17.1.10 按主键逐个处理查询结果(iterate()方法) 17.1.11 可滚动的结果集 17.1.12 在HQL查询语句中绑定参数 ...
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. 管理员可以设定...
8. 检索与查询:支持评分结果在线检索,支持全部活动结果分类汇总显示。 (五)唱票计票功能 可以对选举现场的唱票计票工作进行过程管理,可应用于差额选举和等额选举,在记录候选人票数以外还可以记录非候选人票、...
8. 检索与查询:支持评分结果在线检索,支持全部活动结果分类汇总显示。 (五)唱票计票功能 可以对选举现场的唱票计票工作进行过程管理,可应用于差额选举和等额选举,在记录候选人票数以外还可以记录非候选人票...
并对系统中各类资源的用户点击率和资源下载率进行自动统计,利用这些统计数字,对各资源的被利用率进行排序,以便采取措施来改进设计,更好地为用户服务。主观测评主要是通过用户调查、意见反馈等形式从用户处获得...
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 排序合并的...
[ZBX-13176]在历史管理器(vjaceslavs)中修复了最后一项值检索错误; [ZBX-12856]在触发编辑窗体(gcalenko)中添加相关触发器时; [ZBX-13024]修正了没有输入参数(Sasha)的URL解析“请求”; [ZBX-13153]修复了在...
语言:English 快速了解Steam的当前销售情况 ...变更日志:1.4.9.1 *更改了滚动条样式*正确识别了包1.4.9 *改进了面板模式1.4.8 *折扣排序的次要修复1.4.7 *引入了面板视图:在您的浏览器中访问chrome:// flags /#e