1、在IndexSearcher类中包含了几个可重载的search方法,有一个对结果进行排序的search方法声明为
search(Query,Sort)
public classSortingExample{
private Directory directory;
public SortingExample(Directory direcotry){
this.directory=directory;
}
public void displayHits(Query query,Sort sort) throwsIOException{
IndexSearcher searcher=new IndexSearcher(directory);
Hitshits=searcher.search(query,sort);
System.out.println(StringUtils.rightPad("Title",30))+
StringUtils.rightPad("pubmonth",10)+
StringUtils.center("id",4)+StringUtils.center("score",15));
}
DecimalFormat scoreFormatter=new DeciamalFormat("0.#####");
for (int i=0;i<hits.length();i++){
Document doc=hits.doc(i);
System.out.println(StringUtils.rightPad(
StringUtils.abbreviae(doc.get("title"),29),30)+
StringUtils.rightPad(doc.get("pubmonth"),10)+
StringUtils.center(""+hits.id(i),4)+
StringUtils.leftPad(scoreFormatter.format(hits.score(i)),12)
);
System.out.println(""+doc.get("category"));
}
searcher.close();
}}
2、使用搜索排序
StringindexDir=System.getProperty("index.dir");
FSDirectorydirectory=FSDirectory.getDirectory(indexDir,false);
SortingExample example=new SortingExample(directory);
3、按相关性进行排序(降序),以下三个语句通过displayHits调用了searcher.search,实际效果一样,后2个语句还要另外创建一个Sort对象
example.displayHits(allBooks,null);
example.displayHits(allBooks,Sort.RELEVANCE);
example.displayHits(allBooks,new Sort());
4、按照索引顺序排序(文档ID升序)
example.displayHits(allBooks,Sort.INDEXORDER);
5、通过某个域进行排序
首先,这个域索引时要指定为Field.Keyword域:如:Field.Keyword("size",1024);
其次,要创建新的索引对象
example.displayHits(allBooks,new Sort("category"));
6、以相反顺序排序
对于相关性和文档ID使用默认排序,其他域使用升序排序。使用true指明为倒序
example.displayHits(allBooks,new Sort("category",true));
7、根据多个域进行排序和指定排序域类型
先按category域,再按字段得分,然后按pubmonth(指定了pubmonth的排序域外为int类型)
example.displayHits(allBooks,new Sort(new SortField[]{
new SortField("category"),
SortField.FIELD_SCORE,
new SortField("pubmonth",SortField.INT,true)
}));
8、使用非默认的locale排序
public SortField(String field,Locale locale)
public SortField(String field,Locale locale,boolean reverse)
当按时SortField.STRING类型排序时,应用程序内部会默认地调用String.compareTo()来确定各个项的次序。通过Collator.getInstance(Locale)方法来指定本地的Collator对象,而该对象的Collator.compare()用于决定排序的方式
分享到:
相关推荐
赠送jar包:lucene-spatial3d-6.6.0.jar; 赠送原API文档:lucene-spatial3d-6.6.0-javadoc.jar; 赠送源代码:lucene-spatial3d-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-spatial3d-6.6.0.pom; 包含...
例如,"SimpleTextIndexWriter"演示了如何创建一个简单的文本索引,"BasicSearch"展示了如何执行基本的全文搜索,而"TopDocsCollector"则解释了如何获取和排序搜索结果。通过运行这些示例,开发者可以快速掌握Lucene...
Lucene的搜索结果是基于相关性的,通过TF-IDF算法来计算文档与查询的相关度。 三、版本特性 在“lucene-core-2.4.0.jar”这个版本中,Lucene引入了以下特性: - 改进了多线程索引性能,支持并发写入。 - 引入了更...
例如,通过实现Filter接口,开发者可以自定义过滤规则,对搜索结果进行进一步筛选。对于更复杂的查询需求,可以利用ScoreDoc和TopDocs进行排序和分页,提升用户体验。 总的来说,"Lucene-core-2.0.0.jar"是开发全文...
搜索结果通常按相关性排序,相关性由TF-IDF(词频-逆文档频率)或其他评分算法计算得出。 4. **高级特性**:Lucene 还支持多字段搜索、近实时搜索(NRT)、拼写检查、高亮显示搜索结果、 faceted search(分面搜索...
- Lucene支持对已索引文档进行更新和删除,保证数据的实时性。 在提供的"lucene5.2.1入门经典案例"中,你可以找到如何创建索引、执行查询、高亮显示结果等具体操作的示例代码。这些案例可以帮助初学者快速理解和...
Pinyin4j是一个Java库,主要用于将汉字转换为拼音,这对于进行基于拼音的搜索和排序非常有用。pinyinAnalyzer是Lucene的一个分析器,它利用了Pinyin4j的功能,能够将输入的中文文本分词并转化为拼音形式,以便于...
`lucene-core-2.3.0` 是Lucene的一个早期版本,它包含了构建基本搜索引擎所需的基本组件,如文档处理、索引创建、查询解析和结果排序等。这个版本可能不包含后来版本中的一些优化和特性,比如更先进的分词技术、性能...
- **ScoreDoc**: 搜索结果的评分和文档编号,用于排序。 3. **Lucene的版本历史**: 从2.0.0到最新的版本,Lucene经历了多次迭代和优化,增加了对更多语言的支持,提升了性能,增强了稳定性,并引入了许多新的特性...
2. **Analyzer组件**:`lucene-analyzers-2.4.0.jar` 包含了各种分析器,用于对输入文本进行预处理,如分词、去除停用词、词形还原等。Analyzer是Lucene的关键部分,因为它直接影响到搜索结果的质量。 3. **...
Lucene是一个高性能、全功能的全文搜索引擎库,它提供了一套完整的搜索解决方案,包括索引、查询解析、排序等。`lucene-core-2.4.1.jar`是Lucene的核心库,包含了Lucene的基础组件和API,如文档处理、索引操作、查询...
通过源码分析,我们可以了解到Lucene如何计算这两个值,并结合它们确定搜索结果的排序。 在Lucene-2.9.2的源码中,你可以看到关于TF-IDF的具体实现,如`TFIDFSimilarity`类,它是Lucene对TF-IDF算法的封装。它不仅...
Apache Lucene是一个开源Java库,它提供了一套完整的搜索和分析工具,包括分词、索引、查询解析、评分和排序等功能。Lucene的主要任务是将非结构化的文本数据转化为可供快速检索的结构化索引,从而提升搜索效率。而...
7. **高级功能**:Lucene还包括多线程支持、近实时搜索、自定义排序、过滤器(`Filter`)和拦截器(`Collector`)等高级特性,允许开发者进行更复杂的检索策略设计。 8. **扩展性**:Lucene本身只是一个库,开发者...
`TopDocs`和`ScoreDoc`等类则用于返回和排序搜索结果。 4. **分析(Analysis)**:在索引和搜索过程中,文本数据需要经过分析,将单词拆分为术语(tokens)。4.0.0版本加强了对多种语言的支持,如`StandardAnalyzer...
它不仅支持基本的文本搜索,还提供了高级特性,如布尔查询、短语查询、模糊查询以及对查询结果的排序和过滤。由于其高度可定制性和灵活性,Lucene已成为许多大型企业和开源项目的首选搜索解决方案。 二、Lucene ...
3. **结果显示(Result Display)**:搜索结果会按评分排序,程序需要展示这些结果,通常包括文档ID、评分以及原始内容。 4. **示例数据(Sample Data)**:可能包含一些示例文本文件,用于演示如何创建和搜索索引...
- **结果排序**:Lucene支持基于相关性的排名,通过ScoreDoc对搜索结果进行排序。 4. **Lucene的应用场景** - **网站搜索**:很多网站使用Lucene作为其内部搜索的后端,提供快速准确的站内搜索服务。 - **信息...
- **排序(Scoring)**:根据相关性对搜索结果进行评分和排序。 - **高亮(Highlighting)**:突出显示查询关键词在搜索结果中的位置。 - **命中集(Hit Set)**:搜索结果的集合,包含每个文档的相关信息。 3. ...
- 根据查询结果的评分进行排序,展示最相关的文档。 - 可以实现自定义的排序策略,如基于时间、地理位置等。 总结,Lucene 5.3.1不仅是一个强大的全文检索工具,其源代码更是理解搜索引擎工作原理和优化技巧的...