`
isiqi
  • 浏览: 16453687 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

使用lucene对搜索结果排序

阅读更多
lucene默认根据匹配度对搜索结果降序排,如果对某个域进行排序?
通常分两步:

step1)建索引时
doc.add(newField("audittime",row.get("audittime").toString(),
Field.Store.NO,Field.Index.UN_TOKENIZED));

关键点是你需要排序的字段建索引时应该采用Field.Index.UN_TOKENIZED,至于需不需要Field.Store.NO看实际情况,反正不影响排序

step2)搜索时
publicHitssearch(SearchVOsearchVO)throwsIOException...{
................

Sortsort
=this.buildSort(searchVO);

Hitshits
=searcher.search(query,sort);

returnhits;
}


privateSortbuildSort(SearchVOsearchVO)...{

if(searchVO.getOrderby()==null||searchVO.getOrderby().length()<1)...{
returnnull;
}


Sortsort
=newSort(searchVO.getOrderby(),
(searchVO.getAscflag()==1?false:true
));

returnsort;

}

关键点是通过建立一个Sort实例然后传给IndexSearcher 的另一个重载方法search(Query query,Sort sort);

通过Sort你可以指定排序字段名,升序降序.

如果你需要特指字段类型,你需要使用 new Sort(SortField field)
或者你需要通过多字段排序,你需要使用 new Sort(SortField[] fields)
我就不再赘述了

题外话:

使用lucene 排序是很简单的,但如何发挥它的效果是一个值得思考的地方.

如果你是实时的更新lucene索引我没话说(这需要相当谨慎的设计).

如果你定时更新索引,就会有些问题,比如你要排序的字段更新速度很快,你应该如何显示它? 因为你排序的数据(即建索引时的数据)和当前的数据并不完全同步,这会给显示带来问题.如果你显示建索引时的数据,这样排序本身没问题,但客户会很奇怪我的数据明明是6了怎么还显示4.如果你显示当前的数据就更奇怪了,客户可能会奇怪我的数据是1000怎么排名第4,排名第一的才500? 如果你的数据更新缓慢,这样做不会有什么问题.但更新很快的话就是灾难了.




分享到:
评论

相关推荐

    lucene排序、设置权重、优化、分布式搜索.pdf

    例如,下面的代码演示如何使用 Lucene 对搜索结果进行排序: ```csharp Sort sort = new Sort(new SortField("name", SortField.STRING)); TopDocs topDocs = searcher.Search(query, sort); ``` 在上面的代码中,...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--news.part2

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    lucene自定义排序实现

    例如,他们可能会展示如何创建一个表示日期的排序字段,然后使用`FieldComparator`来比较这些日期,从而按照日期对搜索结果进行排序。 此外,为了优化性能,你还需要考虑以下几点: - 尽量减少排序字段的类型和...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--dic

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--data

    - **排序**:通过调整查询参数,可以基于文档的相关度、发布日期或其他自定义字段对结果进行排序。 - **分页**:为了提高用户体验,搜索引擎通常会限制每次返回的结果数量,实现分页展示,如每页10条记录。 - **...

    lucene排序.zip

    它提供了强大的文本分析、索引和搜索功能,而排序作为搜索结果的重要组成部分,是Lucene的一个核心特性。本文将深入探讨Lucene如何根据关键词出现次数进行排序,以及如何实现自定义排序,包括处理`List&lt;Map&gt;`字段的...

    Lucene0之结果排序.pdf

    Lucene 是一个流行的全文搜索引擎库,其结果排序是通过复杂的算法来实现的,旨在提供最相关的搜索结果。这一过程基于信息检索系统的“相关排序”概念,即根据文档与查询之间的相关性来排列搜索结果。 **向量空间...

    Lucene5学习之自定义排序

    首先,Lucene的核心功能之一就是提供高效的全文检索能力,但默认的搜索结果排序通常是基于相关度得分(Relevance Score),这是由TF-IDF算法计算得出的。然而,在实际应用中,我们往往需要根据其他因素(如时间、...

    lucene3.6 搜索例子

    4. 结果集获取:使用TopDocs类来获取搜索结果,它包含了匹配文档的数量以及按评分排序的文档集合。 四、高级特性 1. 断点续搜:Lucene 3.6支持断点续搜,即在搜索过程中可以暂停并保存状态,之后继续搜索,这对于...

    Lucene5学习之排序-Sort

    在这个主题中,我们将深入理解如何在Lucene 5中对搜索结果进行排序,以便提供更符合用户需求的检索体验。 **描述分析:** 虽然描述部分是空的,但我们可以根据常规的博客结构来推测内容。通常,这样的博客会涵盖...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part1

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--news.part1

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    lucene4.3 按坐标距离排序

    首先,Lucene 4.3引入了对地理空间搜索的支持,这允许我们根据地理位置坐标对文档进行排序。这种功能在许多现代应用中非常实用,比如地图应用、本地搜索服务或任何需要按地理位置相关性展示结果的场景。 要实现按...

    lucene站内搜索

    5. **结果排序(Resuliting Sorting)**: 按照评分从高到低排序搜索结果,返回给用户。 ### 三、使用Lucene进行站内搜索 1. **集成Lucene**: 在项目中引入Lucene库,创建索引目录,并实例化IndexWriter用于写入...

    深入了解Lucene之三 排序算法.doc

    Lucene 排序算法是搜索引擎中的核心组件之一,负责将搜索结果按照相关度排序以便用户快速找到所需信息。 Lucene 的排序算法主要基于 tf-idf 模型,以下是 Lucene 排序算法的详细介绍: 1. tf(Term Frequency):...

    使用Lucene.net进行全文搜索

    评分和排序可以根据相关性对结果进行排列,而命中高亮则可以突出显示文档中匹配的关键词。 ### 5. 示例代码 压缩包中的`SampleLuceneNet`可能包含一个简单的示例,演示了如何使用Lucene.NET创建索引、执行搜索以及...

    LUCENE的搜索引擎例子

    总的来说,使用Lucene构建的B/S架构下的搜索引擎,能够提供高效的全文搜索功能,满足用户对海量数据的快速查找需求。而开发者则需要关注如何优化Analyzer以适应不同语种的分词,如何设计高效查询策略,以及如何优雅...

    lucene的排序过滤和分页.zip

    排序是Lucene中的一项核心功能,允许我们根据文档的某个或多个字段来对搜索结果进行定制化排序。Lucene支持两种类型的排序:基于评分(Score Sorting)和基于字段(Field Sorting)。基于评分的排序默认按照相关性...

Global site tag (gtag.js) - Google Analytics