java框架---->lucene的使用(一)
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的使用(一)的更多相关文章
- 对java框架的几点认识
java框架实在是太多了,网上一抄一大段,根本就了解不到什么.我还是以我的经验来说一下j2ee的框架.1.首先力推struts2框架,这是最经典的框架(可以说没有“之一”).可以帮你快速搭建出一个MV ...
- Java 框架、库和软件的精选列表(awesome java)
原创翻译,原始链接 本文为awesome系列中的awesome java Awesome Java Java 框架.库和软件的精选列表 项目 Bean映射 简化 bean 映射的框架 dOOv - 为 ...
- 如何在Eclipse中查看JDK以及JAVA框架的源码(转载)
原文链接:http://www.cnblogs.com/outlooking/p/5243415.html 设置步骤如下: 1.点 “window”-> "Preferences&qu ...
- Java框架介绍-13个不容错过的框架项目
本文转自互联网,个人收藏所用. 下面,我们将一同分享各有趣且颇为实用的Java库,大家请任取所需.不用客气~ 1.极致精简的Java Bootique是一项用于构建无容器可运行Java应用的极简技术. ...
- 如何查看JDK以及JAVA框架的源码
如何查看JDK以及JAVA框架的源码 设置步骤如下: 1.点 “window”-> "Preferences" -> "Java" -> &q ...
- 【Java】Lucene检索引擎详解
基于Java的全文索引/检索引擎——Lucene Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能. L ...
- 最简单的Java框架
框架framework的目的是定义骨架式方案,处理各种相同的底层细节:而开发人员使用框架时,能够依照自己的需求实现自己的功能--仅仅须要填入自己的东西/flesh. 最简单的框架,类似于JUnit,它 ...
- 2016年7款最流行的Java框架
虽然Java一直被唱衰,但是直到现在Java也坚持霸主地位不动摇,毫无疑问,Java是目前最热门的编程语言之一,所以我们为大家搜集了一些目前比较受欢迎的Java框架的消息. 根据RebelLabs对在 ...
- Java框架spring Boot学习笔记(六):Spring Boot事务管理
SpringBoot和Java框架spring 学习笔记(十九):事务管理(注解管理)所讲的类似,使用@Transactional注解便可以轻松实现事务管理.
随机推荐
- Git -- 新增分支添加新功能
软件开发中,总有无穷无尽的新的功能要不断添加进来. 添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合 ...
- Visual Studio Code自动识别编码
将设置中的"files.autoGuessEncoding"项的值改为true即可. 详情请转知乎:https://www.zhihu.com/question/34415763
- linux rinetd 端口转发部署
linux下简单好用的工具rinetd,实现端口映射/转发/重定向 Rinetd是为在一个Unix和Linux操作系统中为重定向传输控制协议(TCP)连接的一个工具.Rinetd是单一过程的服务器,它 ...
- 3D HTML5 Logo标志 超炫酷旋转特效
今天又要为大家带来一款超酷的HTML5 Canvas 3D动画特效,是一款可以旋转的HTML5 Logo标志.画面上一共有两块可旋转的区域,第一是可旋转的背景,第二则是可旋转的Logo标志.Logo标 ...
- js pjax 和window.history.pushState,replaceState
原文:http://blog.linjunhalida.com/blog/pjax/ github:https://github.com/defunkt/jquery-pjax 什么是pjax? 现在 ...
- eclipse常用插件介绍
1. 测试覆盖率工具:EclEmma https://www.cnblogs.com/Ming8006/p/5811425.html 2. 单元测试系列:如何使用JUnit+JaCoCo+EclEmm ...
- 【转载】高可用的MongoDB集群详解
1.序言 MongoDB 是一个可扩展的高性能,开源,模式自由,面向文档的数据库. 它使用 C++编写.MongoDB 包含一下特点: l 面向集合的存储:适合存储对象及JSON形式的数据. l ...
- linux环境中安装NRPE插件执行远程"本地资源"检查?NRPE安装?
需求描述: 在安装完nagios之后,需要对本地资源进行监控,比如磁盘空间的使用,进程数,swap空间,等等.这些都不是通过网络提供出来的, 所以,都是本地资源,可以通过NRPE插件实现在客户端中采集 ...
- 理解firewall
http://blog.csdn.net/dream361/article/details/54022470 //firewall介绍 http://www.jb51.net/article/103 ...
- log4j MDC用户操作日志追踪配置
一.MDC介绍 MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能.某些应用程序采用多线程的方式 ...