Lucene是一个全文检索的框架,apache组织提供了一个用Java实现的全文搜索引擎的开源项目。这里我们对apache的lucene的框架做一个简单的介绍。心甘情愿这四个字,透着一股卑微,但也有藏不住的勇敢。

lucene的第一个实例

一、maven中引入的依赖pom.xml

<properties>
<lucene.version>6.6.0</lucene.version>
<common-io.version>2.5</common-io.version>
</properties> <dependencies>
<!-- lucene core的依赖-->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>${lucene.version}</version>
</dependency> <dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>${lucene.version}</version>
</dependency> <!-- commomsIO的依赖-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${common-io.version}</version>
</dependency>
</dependencies>

二、关于lucene的java代码如下

package com.linux.huhx.lucene_1;

import org.apache.commons.io.FileUtils;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryparser.classic.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.RAMDirectory; import java.io.File;
import java.io.IOException; public class BaseLucene_1 {
public static void main(String[] args) throws Exception {
// 存放在内存中
Directory dir = new RAMDirectory();
new BaseLucene_1().createIndex(dir);
new BaseLucene_1().search(dir);
} /**
* 创建索引
*/
public void createIndex(Directory dir) throws IOException {
IndexWriter indexWriter = null;
// 1. 创建 Directory (索引存放位置),这里是参数dir // 2. 创建IndexWriter 写索引
Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig iwc = new IndexWriterConfig(analyzer);
indexWriter = new IndexWriter(dir, iwc); // 3. 创建Document 对象 field
Document document;
File file = new File("file/example");
for (File f : file.listFiles()) {
document = new Document(); // 4. 为Documen添加field
document.add(new Field("content", FileUtils.readFileToString(f, "utf-8"), TextField.TYPE_STORED));
document.add(new TextField("fileName", f.getName(), Field.Store.YES));
document.add(new StringField("filePath", f.getAbsolutePath(), Field.Store.YES));
// 5. 通过IndexWriter 添加文档到索引中
indexWriter.addDocument(document);
}
indexWriter.close();
} /**
* 根据内容搜索
* @param dir
* @throws Exception
*/
public void search(Directory dir) throws Exception {
IndexReader indexReader = null;
// 1. 创建 Directory,这里通过参数传递过来的dir
// Directory dir = FSDirectory.open(new File("file/index").toPath()); // 本地磁盘 // 2. 创建 IndexReader
indexReader = DirectoryReader.open(dir); // 3. 创建 IndexSearch
IndexSearcher indexSearcher = new IndexSearcher(indexReader); // 4. 创建搜索的Query
// 创建parse确定搜索的内容,第二个参数为搜索的file
QueryParser queryParser = new QueryParser("content", new StandardAnalyzer()); // 创建Query,表示搜索域中的内容
Query query = queryParser.parse("love"); // 5. 搜索并返回 TopDocs
TopDocs topDocs = indexSearcher.search(query, 10); // 6. 根据topDocs 获得 scoreDocs
ScoreDoc[] socreDocs = topDocs.scoreDocs; for (ScoreDoc doc : socreDocs) {
// 获取Document对象
Document document = indexSearcher.doc(doc.doc); // 根据Document对象获取需要的值
System.out.println(document.get("fileName"));
System.out.println(document.get("content"));
}
indexReader.close();
}
}

三、运行的结果如下

java1.txt
I love you, java.
java2.txt
I love you, linux.
java3.txt
I love you, huhx.

lucene的一些说明介绍

一、Lucene建立索引过程的几个核心类

、IndexWriter: 索引过程的核心组件,这个类负责创建新索引或者打开已有索引,以及向索引中添加、删除或更新索引的信息。

、Directory: 描述了Lucene索引的存放位置。它是一个抽象类,它的子类负责具体指定索引的存储路径。

、Analyzer: 文本文件在被索引之前,需要经过Analyzer处理。Analyzer是由InderWriter的构造方法来指定的,它负责从被索引文本文件中提取语汇单元,交提出剩下的无用信息。

、Document:代表一些域(Field)的集合,比如元数据(作者、标题、主题和修改日期)都可以作为文档的不同域单独存储并被索引。Lucene的内核只处理java.lang.String、java.io.Reader对象和本地数字类型。

、Field:索引中的每个文档都包含一个或多个不同命名的域,这些域包含在Field类中。每个域都有一个域名和对应的域值,以及一组选项来精确控制Lucene索引操作各个域值。

二、Lucene搜索过程中的几个核心类

、InderSearcher: 用于搜索由IndexWriter类创建的索引,这个类公开了几个搜索方法,它是连接索引的中心环节。

、Term: 是搜索功能的基本单元,与Field对象类似,Term对象包含一对字符串元素:域名和单词。它还与索引操作有着。

、Query: 是查询类的父类。子类例如:BooleanQuery、SpanQuery、PhraseQuery等等。

、TermQuery: Lucene提供的最基本的查询类型,它用来匹配指定域中包含特定项的文档。

、TopDocs: 一个简单的指针容器,指针一般指向前N个排名的搜索结果,搜索结果即匹配查询条件的文档。

友情链接

java框架---->lucene的使用(一)的更多相关文章

  1. 对java框架的几点认识

    java框架实在是太多了,网上一抄一大段,根本就了解不到什么.我还是以我的经验来说一下j2ee的框架.1.首先力推struts2框架,这是最经典的框架(可以说没有“之一”).可以帮你快速搭建出一个MV ...

  2. Java 框架、库和软件的精选列表(awesome java)

    原创翻译,原始链接 本文为awesome系列中的awesome java Awesome Java Java 框架.库和软件的精选列表 项目 Bean映射 简化 bean 映射的框架 dOOv - 为 ...

  3. 如何在Eclipse中查看JDK以及JAVA框架的源码(转载)

    原文链接:http://www.cnblogs.com/outlooking/p/5243415.html 设置步骤如下: 1.点 “window”-> "Preferences&qu ...

  4. Java框架介绍-13个不容错过的框架项目

    本文转自互联网,个人收藏所用. 下面,我们将一同分享各有趣且颇为实用的Java库,大家请任取所需.不用客气~ 1.极致精简的Java Bootique是一项用于构建无容器可运行Java应用的极简技术. ...

  5. 如何查看JDK以及JAVA框架的源码

    如何查看JDK以及JAVA框架的源码 设置步骤如下: 1.点 “window”-> "Preferences" -> "Java" -> &q ...

  6. 【Java】Lucene检索引擎详解

    基于Java的全文索引/检索引擎——Lucene Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能. L ...

  7. 最简单的Java框架

    框架framework的目的是定义骨架式方案,处理各种相同的底层细节:而开发人员使用框架时,能够依照自己的需求实现自己的功能--仅仅须要填入自己的东西/flesh. 最简单的框架,类似于JUnit,它 ...

  8. 2016年7款最流行的Java框架

    虽然Java一直被唱衰,但是直到现在Java也坚持霸主地位不动摇,毫无疑问,Java是目前最热门的编程语言之一,所以我们为大家搜集了一些目前比较受欢迎的Java框架的消息. 根据RebelLabs对在 ...

  9. Java框架spring Boot学习笔记(六):Spring Boot事务管理

    SpringBoot和Java框架spring 学习笔记(十九):事务管理(注解管理)所讲的类似,使用@Transactional注解便可以轻松实现事务管理.

随机推荐

  1. [poj 1947] Rebuilding Roads 树形DP

    Rebuilding Roads Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 10653 Accepted: 4884 Des ...

  2. firefox插件-HackBar介绍与试用

    This toolbar will help you in testing sql injections, XSS holes and site security. It is NOT a tool ...

  3. Xianfeng轻量级Java中间件平台:属性管理、字典管理

    属性管理:主要功能是维护一些系统定义的.业务定义的属性数据,至于属性是什么,简单的说就是由键key和值value组成的数据,属性查询列表页面如下: 表格实现了直接编辑的功能 字典管理:主要功能是维护一 ...

  4. [原创]Allegro 导入DXF文件,保留布好的线路信息

    最近智能钥匙产品开发过程中,由于结构装配尺寸的偏差,需要对电路PCB外框OUTLINE进行缩小调整,并且USB插座定位孔改变. Allegro软件在线性绘制方面是有严重缺陷的,想绘制一个异形的板框比较 ...

  5. winform中文本框,软键盘跟随

    private void textBox1_Click(object sender, EventArgs e) { //Control.MousePosition Point p = System.W ...

  6. MyMVC配置

    <system.webServer> <validation validateIntegratedModeConfiguration="false"/> & ...

  7. windows下winscp连接ubuntu

    在ubuntu下安装ssh: sudo apt-get install openssh-server 即可解决.

  8. [ROM]HTC ThunderBolt 4.0.4 刷机教程

    Z大原帖:http://www.in189.com/thread-754076-1-1.html 精简版:http://www.in189.com/thread-807796-1-1.html 下载地 ...

  9. Java编程思想学习笔记——初始化与清理(二)

    成员初始化 Java尽力保证:所有变量在使用前都能得到适当的初始化. 方法的局部变量:未初始化,编译错误. void f(){ int i; // System.out.println(i);//编译 ...

  10. 在eclipse中查看sources源码和JavaDoc帮助文档

    今天学习Netty的过程中,从官网下载的netty里面的内容如下: 其中jar文件夹里面的内容如下: 可以看到每一个具体的jar包就对应有一个sources.jar包,然后所有的帮助文档在javaDo ...