//建索引
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 搜索结果是...
在"lucene4.3 按坐标距离排序"这个主题中,我们将探讨如何在Lucene 4.3版本中利用地理位置信息进行文档排序,特别是在处理地理空间搜索时的应用。 首先,Lucene 4.3引入了对地理空间搜索的支持,这允许我们根据地理...
本文将深入探讨“Lucene5学习之自定义排序”这一主题,帮助你理解如何在Lucene5中实现自定义的排序规则。 首先,Lucene的核心功能之一就是提供高效的全文检索能力,但默认的搜索结果排序通常是基于相关度得分...
在Lucene排序的场景下,`pom.xml`文件可能会包含Lucene库和其他相关库的依赖声明,如Solr(一个基于Lucene的企业级搜索服务器),以便在项目中引入必要的功能。此外,`pom.xml`还可以配置Maven插件,以执行构建、...
Lucene 排序、设置权重、优化、分布式搜索 Lucene 是一个高性能的搜索引擎库,它提供了强大的文本搜索和索引能力。下面我们将详细介绍 Lucene 的排序、设置权重、优化和分布式搜索等知识点。 一、Lucene 排序 ...
深入了解 Lucene 之三排序算法 Lucene 排序算法是搜索引擎中的核心组件之一,负责将搜索结果按照相关度排序以便用户快速找到所需信息。 Lucene 的排序算法主要基于 tf-idf 模型,以下是 Lucene 排序算法的详细介绍...
这部分信息包括tis/tii(Term Dictionary,词典,按字典顺序排序的词),frq(频率文件,记录每个词在文档中的出现次数),prx(偏移量文件,记录词在文档中的位置信息)。 了解这些文件格式后,我们还要知道Lucene...
本资料主要探讨了Lucene中的排序、过滤和分页技术,这些都是构建高效、实用的信息检索系统的重要组成部分。 **排序(Sorting)** 排序是Lucene中的一项核心功能,允许我们根据文档的某个或多个字段来对搜索结果...
由于没有具体的文件内容,我们可以假设"lucene5"可能是包含与Lucene 5相关的教程、代码示例或文档的文件夹。实际的文件名可能会涉及到排序相关的类、方法或者示例项目。 **详细知识点:** 1. **排序基础**:首先,...
本篇文章将围绕“data.rar学习lucene需要的数据文件”这一主题,深入探讨如何利用提供的数据文件学习并掌握Lucene的核心概念和技术。 首先,我们需要了解Lucene是什么。Lucene是一个高性能、全文本搜索库,它提供了...
这是Lucene3.0索引查看文件 直接运行jar包就可以打开ui界面 陪好路径就可以使用了
《深入理解Lucene:解析索引文件的读取》 Lucene,作为一款强大的全文搜索引擎库,被广泛应用于各类信息检索系统中。它的核心功能之一就是构建和读取索引文件,以高效地进行文本搜索。本文将深入探讨Lucene如何读取...
**Lucene小实例文件检索** Lucene是一款由Apache软件基金会开发的全文检索库,它是Java编写的一个高性能、可扩展的信息检索库。这个“lucene小实例文件检索”旨在为初学者提供一个简单但完整的文件检索功能实现,...
3. **评分与排序**: Lucene提供TF-IDF评分机制,根据文档与查询的相关性进行排序。 4. **实时性**: 通过适当的配置,Lucene可以实现近乎实时的索引和搜索。 5. **分片与分布式**: 大规模系统中,可以使用Lucene的...
**Lucene实例项目及其打包文件详解** Lucene是一款强大的全文搜索引擎库,由Apache软件基金会开发,广泛应用于各种信息检索系统。这个实例项目是基于Lucene官网提供的,旨在帮助开发者更好地理解和使用Lucene进行...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
接下来,"Lucene.Net.dll"是Lucene的核心库,实现了Lucene的主要功能,包括索引构建、查询解析、结果排序等。这个DLL包含了各种类和接口,如IndexWriter用于创建和更新索引,Analyzer负责文本分析,QueryParser用于...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
Lucene是用java实现的、成熟的开源项目,是著名的Apache Jakarta大家庭的一员,并且基于Apache软件许可 [ASF, License]。同样,Lucene是当前非常流行的、免费的Java信息搜索(IR)库。Lucene从问世之后,引发了开放源...