//建索引
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自定义排序实现,大家有兴趣关注我的博客http://blog.csdn.net/wuyinggui10000/article/category/3173543
lucene4.3 按坐标距离排序,里面写了个简单的例子。运行就行
Lucene根据关键词出现次数排序以及自定义排序,可以自定义优先级,包含list字段排序与pom等
传统上,人们将信息检索系统返回结果的排序称为"相关排序" (relevance ranking) ,隐含其中各条目的顺序反映结果和查询的相关程度。
这是Lucene3.0索引查看文件 直接运行jar包就可以打开ui界面 陪好路径就可以使用了
lucene排序、设置权重、优化、分布式搜索.pdf
lucene的排序过滤和分页,lucene开发技术,lucene下载
在一定深度介绍LUCENE的排序算法和打分公式。
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
data.rar学习lucene需要的数据文件 data.rar学习lucene需要的数据文件
lucene小实例文件检索,虽然精简 但是实现啦检索文件的功能,lucene初学者必须啊
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
NULL 博文链接:https://iamyida.iteye.com/blog/2201372
Lucene是用java实现的、成熟的开源项目,是著名的Apache Jakarta大家庭的一员,并且基于Apache软件许可 [ASF, License]。同样,Lucene是当前非常流行的、免费的Java信息搜索(IR)库。Lucene从问世之后,引发了开放源...
基于lucene的文件管理系统
2.本工具是在windows平台下的文件搜索工具,可以按照指定类型(word,excel,txt,java .. php等文档文本类型)内容进行搜索,其他类型均可按照文件路径,名称,类型搜索。 3.支持文件路径或内容包含标点符号特殊...
Lucene用到的DLL及文件,自己做项目的时候有需要的到的,希望能帮助到有需要的人,
lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例
lukeall,Lucene索引文件查看工具可支持Lucene4.7版本的索引查看,直接双击打开,选择索引目录进行使用
lucene入门小例子