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. Git -- 相关命令

    git init : 将当前目录变成Git可以管理的仓库 git add :告诉Git,把文件添加到仓库 git commit -m "" :把文件提交到仓库 git status ...

  2. ASP.NET 网站超时跳转到登录界面

    利用actionFilter过滤器实现,超时跳转到登录界面 /// <summary> /// 登录超时跳转至登录界面 /// </summary> public class ...

  3. Linux下yum命令详解

    yum是什么yum = Yellow dog Updater, Modified主要功能是更方便的添加/删除/更新RPM包.它能自动解决包的倚赖性问题.它能便于管理大量系统的更新问题yum特点 可以同 ...

  4. iOS: 动态更改 backBarButtonItem 的 title

    先来看一下 UIBarItem 的 title 的描述 The title displayed on the item. You should set this property before add ...

  5. LinuxMint下tty.js的安装指南

    1.简介 tty.js是使用Node.js开发的开源Web-based SSH.通过浏览器即可远程访问shell. 关于Web-based SSH的介绍参考https://en.wikipedia.o ...

  6. redis 的 HyperLogLog

    Redis 在 2.8.9 版本添加了 HyperLogLog 结构. Redis HyperLogLog 是用来做基数统计的算法 HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大 ...

  7. Android开发学习笔记-md5加密算法

    十六位的md5加密 private static void Md5(String plainText ) { try { MessageDigest md = MessageDigest.getIns ...

  8. Blender 建模

    1.多图层切换 Blender也有图层的概念,我们在一个图层上建立了一个模型,可以在另外一个图层新建一个独立的模型.界面底部包含了Layer切换按钮.如下图所示: 当前我们正在操作第一个图层,如果想在 ...

  9. centos6.8 安装Python2.7后, yum出现“No module named yum”错误

    出现yum错误:No module named yum 解决方法,查看 /usr/bin下python有哪几个版本 ll /usr/bin 我这里是:2.6  和  2.7 (刚安装的) 由于yum命 ...

  10. [scala] scala 集合(⑧)

    1.List 基础操作 2.Set 基础操作 3. TreeSet 排序Set 4. 拉链操作 5. 流 import scala.collection.immutable.TreeSet impor ...