- 浏览: 279554 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 1065IndexWriter 负责创建新索引或打开已有索引, ... -
优秀文章汇总
2012-05-08 18:48 775搜索引擎技术之概要预览 http://blog.csd ... -
【Lucene】lucene查询Query对象
2012-05-08 18:41 1418PrefixQuery 前缀查询。 如 test* 会匹配 ... -
【决策表管理系统】表达式解析
2012-05-07 15:50 1112由condition expression生成方法体Metho ... -
【Lucene】查询term后加上'*'对打分的影响
2012-04-25 18:14 2101BooleanWeight里sum ... -
lucene.search.Weight
2012-04-25 15:39 998org.apache.lucene.search Cl ... -
播发日志检索系统出现的系列问题
2012-04-23 14:42 840index_controller表中显示索引已经结束(f ... -
lucene.search.Similarity
2012-04-20 10:31 2557Similarity defines the componen ... -
lucene打分机制的研究
2012-04-22 17:46 5862提出问题 目前在查询时,会将得分小于1的查询结果过滤掉。 ... -
tokenize和tokenizer到底怎么翻译?
2012-03-28 10:32 3582在编写词法分析器(Lexer)或语法分析器(Parse ... -
【Lucene】更合理地使用Document和Field
2012-03-27 09:39 5448writer = ...; //#1 Prepared ... -
【Lucene】构建索引
2012-03-17 23:16 769Lucene索引的过程是什么? step1 收集待 ... -
信息检索类小程序
2012-03-17 00:37 8531.对四大名著txt实现索引和搜索功能 2. -
决策表管理系统
2012-03-15 18:46 842主题: 1.模板引擎(Velocity) 见 ... -
【Lucene】Scoring
2012-03-13 23:47 1174http://lucene.apache.org/core/o ... -
Information Retrieval
2012-03-13 22:50 1011http://wiki.apache.org/lucene-j ... -
【Lucene】lucene的评分机制
2012-03-07 16:24 955测试环境里查询条件1065800714,为什么Score ... -
各个rules里代码分析
2012-03-06 10:54 766InternalChannelRule private ... -
【Lucene】搜索的核心类简介
2012-03-05 18:48 1391注:Lucene版本为3.4 I ... -
【Lucene】How to make indexing faster
2012-02-16 14:54 849http://wiki.apache.org/lucene-j ...
相关推荐
《基于大规模日志分析的搜索引擎用户行为分析》一文通过对搜狗搜索引擎一个月内近5000万条查询日志的分析,揭示了中文搜索引擎用户的查询习惯和行为模式,这对于改进搜索引擎算法以及提高检索结果的质量具有重要意义...
综上所述,《电信设备-基于标引关联关系的信息检索排序方法》涵盖的内容广泛且深入,包括信息检索理论、关联关系分析、排序算法、系统性能优化等多个方面,这些都是保障电信行业高效运行的重要技术基础。通过不断的...
- **效率分析**:通过对日志数据的分析,可以评估工作效率,找出改进空间。 6. **协作共享** - **团队协作**:支持多人协作,团队成员可以共享日志,共同追踪项目进度。 - **权限设置**:管理员可以设定不同用户...
"基于集成支撑矢量机排序的信息检索方法"是一种利用机器学习技术来改进传统信息检索过程的方法,旨在提高检索效率和准确性。此方法的核心是集成学习和支撑向量机(SVM)排序。 支撑向量机(Support Vector Machine,...
该文通过对搜狗搜索引擎一个月内接近5000万条查询日志的大规模分析,深入探讨了中文搜索用户的检索行为特点及其对中文搜索引擎性能提升的影响。 #### 用户行为分析的重要性 用户行为分析对于网络信息检索技术的...
用户的行为,尤其是间接行为,能够反映出他们的兴趣,这些信息可以用于改进检索结果的排序算法。例如,TSPR算法结合了页面主题性和用户兴趣,对检索结果进行个性化排序,从而提高搜索质量。 综上所述,元搜索引擎...
5. **检索策略优化**:结合用户画像,优化信息检索策略,可能包括加权排序、个性化推荐等,确保返回的检索结果与用户的行为和需求高度匹配。 6. **反馈循环**:持续监控用户对检索结果的反馈,进一步调整和改进模型...
在实际项目中,还需要考虑用户体验,例如提供友好的界面、提供搜索建议和相关搜索功能,以及处理查询日志以进行用户行为分析和系统改进。 综上所述,这个"人工智能-项目实践-信息检索-信息检索系统大作业"提供了从...
- **学习排序**(Learning to Rank):结合机器学习方法改进搜索结果的排序机制。 - **链接分析**(Link Analysis):通过对网页之间的链接关系进行分析,推断网页的重要性和相关性。 - **信息提取**(Information ...
8. **性能监控和调优**:为了持续改进,开发者可能需要添加日志记录和性能监控功能,以便于跟踪和优化系统性能。 这个C#版全文检索引擎代码项目为开发者提供了一个动手实践的机会,可以深入理解搜索引擎的工作原理...
本文主要讨论的是黄玉兰的工作总结,涵盖了多个IT领域的研究与开发项目,主要包括搜索日志分析系统Smark、拼音汉字转换系统调研、有意义串相关工作以及词聚类调研。以下是这些领域的详细说明: 1. **搜索日志分析...
10. **持续改进**:根据用户反馈和搜索日志进行分析,不断优化搜索算法和功能,提升搜索质量。 综上所述,“仿百度检索”项目涉及了数据库管理、编程、网络通信、自然语言处理等多个IT领域的知识,是一个综合性的...
- 权重计算用于决定结果的相关度,排序模式决定搜索结果的呈现顺序。 - 结果分组(聚类)可按某个字段进行聚合,便于浏览。 - 分布式搜索支持跨多个索引或节点进行查询,提高检索效率。 - `searchd`日志格式记录...