1.lucene初认识:入门例子
来源:互联网 发布:手机wifi网络测试软件 编辑:程序博客网 时间:2024/05/19 02:44
Lucene是一个基于Java的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta(雅加达) 家族中的一个开源项目。也是目前最为流行的基于Java开源全文检索工具包。
下面看下Lucene的一个简单的入门例子:
使用版本:Lucene 4.9 官方网站: http://lucene.apache.org/
开始:
1.创建普通java工程;
2.引入包:
1.建立索引
import java.io.File;import java.io.FileReader;import java.io.IOException;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field.Store;import org.apache.lucene.document.StringField;import org.apache.lucene.document.TextField;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.RAMDirectory;import org.apache.lucene.util.Version;public class CreateIndex {/** * 创建索引 */public void index(){IndexWriter indexWriter = null;try {//1.创建Directory//Directory directory = new RAMDirectory(); //在内存中创建索引Directory directory = FSDirectory.open(new File("E:/Luence/index"));//在硬盘上的E:/Luence/index下建立索引目录//2.创建IndexWriterIndexWriterConfig iwconfig = new IndexWriterConfig(Version.LUCENE_40, new StandardAnalyzer(Version.LUCENE_40));indexWriter = new IndexWriter(directory, iwconfig);//3.创建Document对象Document document = null;File file = new File("E:/Luence/doc");for (File f : file.listFiles()) {//4.添加Document对象的Filed属性document = new Document();System.out.println("-----为的文件添加索引:"+f.getName());//document.add(new Field("content",new FileReader(f))); //该new Field()方法已废弃document.add(new TextField("content", new FileReader(f))); //存入内容document.add(new StringField("filename", f.getName(), Store.YES)); //存入文件名document.add(new StringField("filePath", f.getPath(), Store.YES)); //存入文件路径//5.使用IndexWriter把文档Docment对象存入索引indexWriter.addDocument(document);}System.out.println("-------------------索引创建完毕!!----------------------");} catch (IOException e) {e.printStackTrace();} finally{if (indexWriter != null) {try {indexWriter.close();} catch (IOException e) {e.printStackTrace();}}}}}
2.操作索引,查找内容
<span style="font-size:12px;">import java.io.File;import java.io.IOException;import org.apache.lucene.document.Document;import org.apache.lucene.index.DirectoryReader;import org.apache.lucene.index.IndexReader;import org.apache.lucene.index.Term;import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.Query;import org.apache.lucene.search.ScoreDoc;import org.apache.lucene.search.TermQuery;import org.apache.lucene.search.TopDocs;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;import org.apache.lucene.store.RAMDirectory;import org.apache.lucene.util.Version;/** * 1.创建Directory * 2.创建IndexReader * 3.根据IndexReader创建IndexSearcher * 4.创建搜索的Query * 5.根据Searcher搜索并且返回TopDocs * 6.根据TopDocs获取ScoreDoc对象 * 7.根据Seacher和ScoreDoc对象获取具体的Document对象 * 8.根据Document对象获取需要的值 * 9.关闭IndexReader * * @author Leo * */public class OperaLucene {public void searcher(String key) {Directory directory = null;IndexReader indexReader = null;IndexSearcher indexSearcher = null;try {// 1.创建Directorydirectory = FSDirectory.open(new File("E://Luence//index")); // 取得硬盘上的E:/Luence/index下建立的索引目录// 2.创建IndexReader// IndexReader indexReader = IndexReader.open(directory); //该创建方法已经废弃indexReader = DirectoryReader.open(directory);// 创建读取索引对象IndexReader// 3.根据IndexReader创建IndexSearcherindexSearcher = new IndexSearcher(indexReader);// 4.设置要查询的域(属性),查询的内容 keyTerm term = new Term("content", key);TermQuery query = new TermQuery(term);TopDocs topdocs = indexSearcher.search(query, 5);ScoreDoc[] scoreDocs = topdocs.scoreDocs;System.out.println("--查询结果总数:" + topdocs.totalHits + "; 最大的评分:"+ topdocs.getMaxScore());// 遍历搜索结果for (ScoreDoc scoreDoc : scoreDocs) {Document document = indexSearcher.doc(scoreDoc.doc);System.out.println("--搜索结果:--" + document.get("filename") + "["+ document.get("filePath") + "]");//System.out.println("content:" + document.get("content"));}} catch (Exception e) {// TODO: handle exception} finally {if (indexReader != null) {// 9.关闭IndexReadertry {indexReader.close();} catch (IOException e) {e.printStackTrace();}}}}}</span>
3.运行测试
<span style="font-size:12px;">public class MyLuenceMain {public static void main(String[] args) {//1.创建索引CreateIndex createIndex = new CreateIndex();createIndex.index();//2.开始搜索String key = "lucene";OperaLucene operaLucene = new OperaLucene();operaLucene.searcher(key);}}</span>
4.运行结果
-----为的文件添加索引:1.txt-----为的文件添加索引:2.txt-----为的文件添加索引:3.txt-------------------索引创建完毕!!------------------------查询结果总数:2; 最大的评分:0.1058217--搜索结果:--1.txt[E:\Luence\doc\1.txt]--搜索结果:--1.txt[E:\Luence\doc\1.txt]
小结:由于Lucene的各版本变化较大,很多类的构造方法都有不同程度的废弃或是新增,还是要结合官方对应版本的api还创建对应的对象,同时目前这个例子还没对于同一文件的索引【重复添加】的设置,希望各位大神如果看到的话可以告诉下我!
0 0
- 1.lucene初认识:入门例子
- java lucene入门例子
- Lucene入门例子
- Lucene入门例子
- Lucene入门以及例子
- Lucene入门例子
- Lucene入门例子
- Lucene的入门例子
- 1. 认识lucene
- Lucene-搜索的入门例子
- Lucene入门,小例子,笔记
- Lucene入门,小例子,笔记
- lucene入门简单的例子
- lucene学习01之简单小例子初步认识lucene
- lucene索引创建与查询入门例子
- lucene快速入门---一个例子读懂
- 认识Lucene
- lucene 例子
- Java NIO系列教程(九) ServerSocketChannel
- C语言基础——字符串及常用函数
- C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- Hadoop安全模式详解及配置
- Sed
- 1.lucene初认识:入门例子
- WebLogic启动脚本
- Unity3D发布安卓时遇到的问题解决办法
- Java NIO系列教程(十) Java NIO DatagramChannel
- oracle的异常处理
- 在Mono for Android中集成JPush数据推送功能
- 静态方法中为什么不能使用super和this
- 循环赛日程表
- 升级gcc,glibc库途中遇到的各种问题