lucene索引创建与查询入门例子
来源:互联网 发布:淘宝三星官方旗舰店 编辑:程序博客网 时间:2024/06/05 10:38
一、创建索引
import java.io.File;
import java.io.FileReader;
import java.util.Date;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.DateTools;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.SimpleFSDirectory;
import org.apache.lucene.util.Version;
public class Indexer {
/**
* @param args
*/
public static void main(String[] args) throws Throwable{
//保存索引文件的地方
String indexDir = "F:\\testIndex";
//将要搜索TXT文件的地方
String dateDir = "F:\\testDoc";
IndexWriter indexWriter = null;
//创建Directory对象
Directory dir = new SimpleFSDirectory(new File(indexDir));
//创建IndexWriter对象,第一个参数是Directory,第二个是分词器,第三个表示是否是创建,如果为false为在此基础上面修改,第四表示表示分词的最大值,比如说new MaxFieldLength(2),就表示两个字一分,一般用IndexWriter.MaxFieldLength.LIMITED
indexWriter = new IndexWriter(dir,new StandardAnalyzer(Version.LUCENE_36),true,IndexWriter.MaxFieldLength.UNLIMITED);
File[] files = new File(dateDir).listFiles();
for (int i = 0; i < files.length; i++) {
Document doc = new Document();
//创建Field对象,并放入doc对象中
doc.add(new Field("contents", new FileReader(files[i])));
doc.add(new Field("filename", files[i].getName(),
Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.add(new Field("indexDate",DateTools.dateToString(new Date(), DateTools.Resolution.DAY),Field.Store.YES,Field.Index.NOT_ANALYZED));
//写入IndexWriter
indexWriter.addDocument(doc);
}
//查看IndexWriter里面有多少个索引
System.out.println("numDocs"+indexWriter.numDocs());
indexWriter.close();
}
}
二、查询索引
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.FieldSelector;
import org.apache.lucene.document.MapFieldSelector;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.FilteredQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.QueryWrapperFilter;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.SimpleFSDirectory;
import org.apache.lucene.util.Version;
public class Searcher {
/**
* @param args
*/
public static void main(String[] args) throws Throwable{
//保存索引文件的地方
String indexDir = "F:\\testIndex";
Directory dir = new SimpleFSDirectory(new File(indexDir));
//创建 IndexSearcher对象,相比IndexWriter对象,这个参数就要提供一个索引的目录就行了
IndexSearcher indexSearch = new IndexSearcher(dir);
//创建QueryParser对象,第一个参数表示Lucene的版本,第二个表示搜索Field的字段,第三个表示搜索使用分词器
QueryParser queryParser = new QueryParser(Version.LUCENE_36,
"contents", new StandardAnalyzer(Version.LUCENE_36));
//生成Query对象
Query query = queryParser.parse("contents:book ");
Query queryFilter = queryParser.parse("indexDate:20130304");
Filter filter = new QueryWrapperFilter(queryFilter);
//在结果中找
query = new FilteredQuery(query,filter);
filter = new QueryWrapperFilter(queryParser.parse("filename:na*"));
//搜索结果 TopDocs里面有scoreDocs[]数组,里面保存着索引值
TopDocs hits = indexSearch.search(query,filter, 10);
//hits.totalHits表示一共搜到多少个
System.out.println("找到了"+hits.totalHits+"个");
//循环hits.scoreDocs数据,并使用indexSearch.doc方法把Document还原,再拿出对应的字段的值
for (int i = 0; i < hits.scoreDocs.length; i++) {
ScoreDoc sdoc = hits.scoreDocs[i];
Document doc = indexSearch.doc(sdoc.doc);
// List<String> list = new ArrayList<String>();
// list.add("indexDate");
// //添加选择器,可选择加载哪些Field
// FieldSelector selector = new MapFieldSelector(list);
// doc = indexSearch.doc(sdoc.doc, selector);
System.out.println(doc.get("filename"));
// System.out.println(doc.get("contents"));
// System.out.println(doc.get("indexDate"));
// for(Fieldable str :doc.getFields()){
// System.out.println(str);
// }
//
// System.out.println(sdoc);
}
indexSearch.close();
}
}
- lucene索引创建与查询入门例子
- Lucene的入门例子 - 创建索引,利用索引查询
- Lucene索引创建、查询与高亮
- lucene 索引创建查询
- Lucene创建索引入门
- lucene创建索引,分组查询
- lucene 创建索引 查询实例
- Lucene入门之创建索引
- Lucene创建索引入门案例
- Lucene创建索引入门案例
- solr入门之lucene创建索引和查询索引及查询的源码读取类确定
- 【Lucene】使用反射技术优化Lucene索引库的查询与创建
- Lucene创建索引与搜索索引
- Lucene创建索引与搜索索引试手
- Lucene简单实现创建索引以及查询
- Lucene创建、查询、删除、更新 索引
- Lucene学习-创建索引、关键词查询
- lucene中查询索引库代码入门
- 获取JPG或者BMP图片的像素
- js 只能输入数字,其他无法输入
- 国嵌--linux字符设备驱动学习之memdev设备
- Xml解析Exception:Content is not allowed in prolog
- 如何编写出拥抱变化的代码?
- lucene索引创建与查询入门例子
- HDU3783:ZOJ
- hdu3789之奥运排序
- 黑马程序员--SQL学习笔记之存储过程
- MIUI开发版和稳定版有什么区别
- RMB小写转换成大写
- 我为何喜欢上海不喜欢北京
- 加载主题(皮肤、样式表)的多种方式
- bcb6 安装office2k控件 excel