在全文搜索工具中由三部分组成,索引部分,分词部分,搜索部分。

下面案例简单介绍:

首先创建索引,然后通过索引进行查找:

package org.itat.test;
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;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;
public class HelloLucene {/*** 创建索引*/public void index() {Directory directory = null;IndexWriterConfig iwc = null;IndexWriter iw = null;try {// 1!创建DIRECTORY// Directory directory=new RAMDirectory();directory = FSDirectory.open(new File("E:/lucenetext"));// 2!创建INDEXWRITERiwc = new IndexWriterConfig(Version.LUCENE_35,new StandardAnalyzer(Version.LUCENE_35));iw = new IndexWriter(directory, iwc);// 3!!创建document对象Document doc = null;// 4!为document添加fieldFile f = new File("E:/Workspaces/STS/Lucene/testfile");for (File file : f.listFiles()) {doc = new Document();Field content = new Field("content", new FileReader(file));Field filename = new Field("filename", file.getName(),Field.Store.YES, Field.Index.NOT_ANALYZED);Field path = new Field("path", file.getAbsolutePath(),Field.Store.YES, Field.Index.NOT_ANALYZED);doc.add(content);doc.add(filename);doc.add(path);// 5!把文档doc添加到索引中iw.addDocument(doc);}} catch (CorruptIndexException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (LockObtainFailedException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {iw.close();} catch (CorruptIndexException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
/**
*搜索
*/public void search(){try {//1 在哪搜:创建索引目录Directory dir=FSDirectory.open(new File("E:/lucenetext"));//2 搜谁:读索引IndexReader ir=IndexReader.open(dir);//3 开搜准备:根据indexreader创建indexsearchIndexSearcher isearch=new IndexSearcher(ir);//4 怎么搜:创建搜索query,根据文件域搜索,限定显示条目QueryParser parser=new QueryParser(Version.LUCENE_35, "content",new StandardAnalyzer(Version.LUCENE_35));//表示搜索域中为java的文档Query query=parser.parse("i");//5 根据搜索返回topdocsTopDocs top=isearch.search(query, 10);//6 根据topdocs获取scoredoc对象ScoreDoc[] sdoc=top.scoreDocs;System.out.println("文件条目"+sdoc.length);for(ScoreDoc sd:sdoc){//7 获得文档documentDocument doc=isearch.doc(sd.doc);//8 显示结果System.out.println("文件:");System.out.println("文件名:"+doc.get("filename"));System.out.println("路径名:"+doc.get("path"));}ir.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

然后使用junit进行测试:

package testfile;
import org.itat.test.HelloLucene;
import org.junit.Test;
public class test {@Testpublic void testindex(){HelloLucene h=new HelloLucene();h.index();}@Testpublic void testsearch(){HelloLucene h=new HelloLucene();h.search();}
}

错误调试:

错误一:我把索引目录放在了测试文件夹下,第二次创建索引的时候一直显示文件拒绝访问,后发现了这个问题,索引不允许再建索引,索引报异常,换索引文件夹就好了!

转载于:https://blog.51cto.com/chanir/1201000

Lucene开发(一):快速入门相关推荐

  1. Electron开发之——快速入门

    一 概述 Electron是一个可以使用Web技术如:JavaScript.HTML和CSS来创建跨平台原生桌面应用的框架.借助Electron,我们可以使用纯JavaScript来调用丰富的原生AP ...

  2. Z-Wave 800 Pro开发套件快速入门

    近期有用户在Silicon Labs(亦称"芯科科技")在线社区中分享了其使用Z-Wave 800 Pro开发套件(ZWAVE-PK800A)的心得,并简单介绍了如何快速启动的步骤 ...

  3. Python开发-Django快速入门

    如果你是一位python开发初学者,而且你对Django一无所知,那下面介绍的内容将会是你所需要知道的关于 Django 的知识. 一.快速入门 你是刚学 Python.Django 或是初学编程吗? ...

  4. 涂鸦T2-U开发板快速入门

    文章目录 T2-U模组概述 特性 1.环境搭建 2.SDK下载 3.编译 3.1. 命令编译 3.2. 命令编译清除 3.3. Wind-IDE 编译 3.4.编译完成 4.下载 4.1. GUI工具 ...

  5. java云开发_快速入门云开发

    什么是云开发 这里引用官方的一段描述: 云开发(Tencent CloudBase,TCB)是云端一体化的后端云服务 ,采用 serverless 架构,免去了移动应用构建中繁琐的服务器搭建和运维.同 ...

  6. Vue笔记(适合后端人员开发的快速入门)

    本文是参照B站up主'编程不良人'整理的笔记 目录 1. Vue 引言 2. Vue入门 2.1 下载Vuejs 2.2 Vue第一个入门应用 3. v-text和v-html 3.1 v-text ...

  7. python嵌入shell代码_小白进!嵌入式开发如何快速入门?

    文章字数3600   干货指数:☆ ☆ ☆ ☆ ☆ 留意没?其实智能手环.智能音箱.智能家电.共享单车.无人驾驶.....这些属于嵌入式系统的产品都早已融入了我们的日常生活. 嵌入式究竟是什么?嵌入式 ...

  8. JavaFX开发教程——快速入门FX

    本文章主要针对JavaFX的入门内容进行讲解 创建项目 next 下一步的其他组件可以不用选 项目结构 HelloApplication-项目运行入口 HelloController-前后端交互类(跟 ...

  9. Python全栈开发-gitgithub快速入门

    转自:https://www.cnblogs.com/alex3714/articles/5930846.html 本节内容 github介绍 安装 仓库创建& 提交代码 代码回滚 工作区和暂 ...

  10. Linux基础开发工具快速入门

    学习导航 一.软件包管理器yum 1.linux如何进行安装 2.什么是软件包 3.yum如何安装程序 (1)原理的感性理解 (2)yum常用指令 二.Linux编辑器Vim的使用 1.初步认识 2. ...

最新文章

  1. 组策略轻松实现软件发布,Active Directory系列之二十二
  2. 使用pdf.js预览实现读取服务器外部文件
  3. 某电商平台开发记要——客服系统
  4. CORS 跨域 实现思路及相关解决方案(转:http://www.cnblogs.com/sloong/p/cors.html)
  5. 图标出问题_同是Office365,为什么你的软件图标还是旧版的?
  6. java国际化---native2ascii.exe 的使用方法
  7. Cookie和会话Session
  8. win7如何安装mysql5.7_Win7下安装MySQL5.7备忘
  9. 等价于什么_从来就没有什么等价交换
  10. webpack+Vue2.0项目基础工程文件配置
  11. 实现gabor filter的滤波
  12. python常用代码大全,常用库大全
  13. ftp扫描工具,ftp扫描工具如何使用?ftp工具很多用户选iis7服务器管理工具
  14. 2022年,美股将要上市的巨头能否逃过破发命运?
  15. 5G专网大上行带宽技术设计与实现
  16. CapstoneCS5212|CapstoneCS5218|DP转VGA1080P方案设计| DP转HDMI4K 30Hz方案设计
  17. sql语句左连接时的ON AND用法
  18. 深度学习之tensorflow:tensorflow-cpu;win10+gtx1050ti+tensorflow-gpu搭建过程以及问题解决
  19. java面试题_度小满一面_java面经汇总
  20. FOTRIC 692Pro红外热成像仪 人体体温筛查

热门文章

  1. 进入阿里做测试员遥不可及?这里或许有你想要的答案
  2. 不做单元测试的6大借口
  3. 抗滑桩弹性计算方法_抗滑桩设计与计算99147
  4. solidwork 侵权 证据_电子商务法复习题
  5. 华为管理学案例分析_案例分析 华为——基于价值、围绕结果展开的绩效考核...
  6. java webengine_webview – JavaFX 8 WebEngine:如何从java到console.log()从java到System.out?
  7. 在mathtype中怎么打出花体字母
  8. Learning to Segment Object Candidates
  9. install openni2 on ubuntu
  10. as-conformal-as-possible discrete volumetric mapping