`
smallearth
  • 浏览: 37429 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Lucene小练十四(文件排序)

 
阅读更多
//建索引
package Java.se.lucene;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.NumericField;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.util.Version;
import org.wltea.analyzer.lucene.IKAnalyzer;

public class Test_Index {

	private Analyzer analyzer=new IKAnalyzer();
	private static Directory directory=null;
	static{
		try {
			directory=FSDirectory.open(new File("f:/lucene/Index07"));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public static Directory getDirectory()
	{
		return directory;
	}
	public void index(boolean hasNew)
	{
		IndexWriter writer=null;
		try {
			  writer=new IndexWriter(directory,new IndexWriterConfig
					(Version.LUCENE_36, analyzer));
			if(hasNew)
			{
				writer.deleteAll();
			}
			File file=new File("F:/lucene/lucenes");
			Document doc=null;
			for(File f:file.listFiles())
			{
				doc=new Document();
				doc.add(new Field("content",new FileReader(f)));//添加内容
				doc.add(new Field("filename",f.getName(),Field.Store.YES,
						Field.Index.NOT_ANALYZED));//添加Name
				doc.add(new Field("path",f.getAbsolutePath(),Field.Store.YES,
						Field.Index.NOT_ANALYZED));
				doc.add(new NumericField("date",Field.Store.YES, true).setLongValue
						(f.lastModified()));
				doc.add(new NumericField("size",Field.Store.YES,true).setIntValue
					((int)f.length()/1024));
				writer.addDocument(doc);
			}
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (LockObtainFailedException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally
		{
			if(writer!=null)
			{
				try {
					writer.close();
				} catch (CorruptIndexException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}
//建搜索
package Java.se.lucene;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.lucene.document.Document;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.TopDocs;
import org.wltea.analyzer.lucene.IKQueryParser;
import org.wltea.analyzer.lucene.IKSimilarity;

public class Test_Search {

	static IndexReader reader=null;
	static{
		try {
			reader=IndexReader.open(Test_Index.getDirectory());
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public IndexSearcher getSearcher()
	{
		 try {
			reader=IndexReader.open(Test_Index.getDirectory());
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		 return new IndexSearcher(reader);
	}
	//返回Searcher
	public void Searcher(String keyword,Sort sort)
	{
		 try {
			 IndexSearcher searcher=getSearcher();
			 //使文件评分显示出来
			 searcher.setDefaultFieldSortScoring(true, false);
			 //在搜索器中使用IKSimilarity相似度评估器
			 searcher.setSimilarity(new IKSimilarity());
			 //创建IK。。 Query
			 Query query =IKQueryParser.parse("content",keyword);
			 TopDocs topDocs=null;
			 if(sort!=null)
			 {
				 topDocs=searcher.search(query, 50, sort); 
			 }else {
				 topDocs=searcher.search(query, 50); 
			}
			 //设置时间格式
			 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			 for(ScoreDoc sds:topDocs.scoreDocs)
			 {
				 Document document=searcher.doc(sds.doc);
				 System.out.println(sds.doc+"-->"+document.get("filename")
						 +"【"+document.get("path")+"】"+"["+document.get("size")
						 +"]"+"("+sds.score+")"+"-->"+sdf.format
						 (new Date(Long.valueOf(document.get("date")))));
			 }
			 searcher.close();
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
//测试类
package Java.se.lucene;

import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.junit.Before;
import org.junit.Test;

public class Test_All {
	Test_Index index=null;
	Test_Search search =null;
	@Before
	public void init()
	{
		 index=new Test_Index();
		 search =new Test_Search();
	}
	
	@Test
	public void test_index()
	{
		index.index(true);
	}
	@Test
	public void test_search()
	{
//		search.Searcher("java", null);
//		//按照默认评分排序
//		search.Searcher("java", new Sort().RELEVANCE);
//		//通过文件ID排序
//		search.Searcher("java", new Sort().INDEXORDER);
//		//通过文件大小排序
//		search.Searcher("java", new Sort(new SortField("size",SortField.INT)));
		//通过文件日期排序
//		search.Searcher("java", new Sort(new SortField("date",SortField.LONG)));
		//通过文件名称排序,第三个参数设置排序方式(true为降序)
//		search.Searcher("java", new Sort(new SortField("filename",SortField.STRING
//			,true)));
		//多条件排序
		search.Searcher("java",new Sort(new SortField("filename",SortField.STRING
				),SortField.FIELD_SCORE));
	}

}

分享到:
评论

相关推荐

    lucene自定义排序实现

    因此,了解如何在 Lucene 中实现自定义排序是非常关键的。在这个话题中,我们将深入探讨如何根据特定的业务需求对搜索结果进行定制排序。 首先,我们要明白 Lucene 默认的排序机制。默认情况下,Lucene 搜索结果是...

    lucene4.3 按坐标距离排序

    在"lucene4.3 按坐标距离排序"这个主题中,我们将探讨如何在Lucene 4.3版本中利用地理位置信息进行文档排序,特别是在处理地理空间搜索时的应用。 首先,Lucene 4.3引入了对地理空间搜索的支持,这允许我们根据地理...

    Lucene5学习之自定义排序

    本文将深入探讨“Lucene5学习之自定义排序”这一主题,帮助你理解如何在Lucene5中实现自定义的排序规则。 首先,Lucene的核心功能之一就是提供高效的全文检索能力,但默认的搜索结果排序通常是基于相关度得分...

    lucene排序.zip

    在Lucene排序的场景下,`pom.xml`文件可能会包含Lucene库和其他相关库的依赖声明,如Solr(一个基于Lucene的企业级搜索服务器),以便在项目中引入必要的功能。此外,`pom.xml`还可以配置Maven插件,以执行构建、...

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

    Lucene 排序、设置权重、优化、分布式搜索 Lucene 是一个高性能的搜索引擎库,它提供了强大的文本搜索和索引能力。下面我们将详细介绍 Lucene 的排序、设置权重、优化和分布式搜索等知识点。 一、Lucene 排序 ...

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

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

    lucene索引文件格式介绍

    这部分信息包括tis/tii(Term Dictionary,词典,按字典顺序排序的词),frq(频率文件,记录每个词在文档中的出现次数),prx(偏移量文件,记录词在文档中的位置信息)。 了解这些文件格式后,我们还要知道Lucene...

    lucene的排序过滤和分页.zip

    本资料主要探讨了Lucene中的排序、过滤和分页技术,这些都是构建高效、实用的信息检索系统的重要组成部分。 **排序(Sorting)** 排序是Lucene中的一项核心功能,允许我们根据文档的某个或多个字段来对搜索结果...

    Lucene5学习之排序-Sort

    由于没有具体的文件内容,我们可以假设"lucene5"可能是包含与Lucene 5相关的教程、代码示例或文档的文件夹。实际的文件名可能会涉及到排序相关的类、方法或者示例项目。 **详细知识点:** 1. **排序基础**:首先,...

    data.rar学习lucene需要的数据文件

    本篇文章将围绕“data.rar学习lucene需要的数据文件”这一主题,深入探讨如何利用提供的数据文件学习并掌握Lucene的核心概念和技术。 首先,我们需要了解Lucene是什么。Lucene是一个高性能、全文本搜索库,它提供了...

    lucene索引查看文件

    这是Lucene3.0索引查看文件 直接运行jar包就可以打开ui界面 陪好路径就可以使用了

    Lucene读取索引文件

    《深入理解Lucene:解析索引文件的读取》 Lucene,作为一款强大的全文搜索引擎库,被广泛应用于各类信息检索系统中。它的核心功能之一就是构建和读取索引文件,以高效地进行文本搜索。本文将深入探讨Lucene如何读取...

    lucene小实例文件检索

    **Lucene小实例文件检索** Lucene是一款由Apache软件基金会开发的全文检索库,它是Java编写的一个高性能、可扩展的信息检索库。这个“lucene小实例文件检索”旨在为初学者提供一个简单但完整的文件检索功能实现,...

    基于lucene的文件管理系统

    3. **评分与排序**: Lucene提供TF-IDF评分机制,根据文档与查询的相关性进行排序。 4. **实时性**: 通过适当的配置,Lucene可以实现近乎实时的索引和搜索。 5. **分片与分布式**: 大规模系统中,可以使用Lucene的...

    lucene实例项目及其打包文件

    **Lucene实例项目及其打包文件详解** Lucene是一款强大的全文搜索引擎库,由Apache软件基金会开发,广泛应用于各种信息检索系统。这个实例项目是基于Lucene官网提供的,旨在帮助开发者更好地理解和使用Lucene进行...

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

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

    Lucene用到的DLL及文件

    接下来,"Lucene.Net.dll"是Lucene的核心库,实现了Lucene的主要功能,包括索引构建、查询解析、结果排序等。这个DLL包含了各种类和接口,如IndexWriter用于创建和更新索引,Analyzer负责文本分析,QueryParser用于...

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

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

    Lucene文件检索实战项目

    Lucene是用java实现的、成熟的开源项目,是著名的Apache Jakarta大家庭的一员,并且基于Apache软件许可 [ASF, License]。同样,Lucene是当前非常流行的、免费的Java信息搜索(IR)库。Lucene从问世之后,引发了开放源...

Global site tag (gtag.js) - Google Analytics