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.

友情链接

时间: 2024-11-11 14:00:30

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

搜索引擎 (一)全文资源检索框架Lucene

今天来写写搜索,现在做的这个项目中涉及到了很多的搜索大部分是我做的,有次经理问我有没有用过luence这个搜索引擎,这个还真没有用过只是听说过有这么个搜索工具包,一直没有接触过,利用做项目空闲的时间也在逐渐了解搜索方面的东西,对搜索也重新认识了一下觉得搜索方向还是很值得我们研究和应用的. 在学习方面有时选择好一个正确的学习方向是比较重要的,在我们学的过程中米老师给我指明了方向所以你不会迷茫,也知道下一步将要学习什么,但慢慢的你需要自己确定学习什么,转变角色,互联网这么发达信息量如海一般在你面前呈

对java框架的几点认识

java框架实在是太多了,网上一抄一大段,根本就了解不到什么.我还是以我的经验来说一下j2ee的框架.1.首先力推struts2框架,这是最经典的框架(可以说没有“之一”).可以帮你快速搭建出一个MVC模型出来.(注:struts1已经很少用了,且问题也很多,强烈推荐使用struts2).2.Spring框架,这是排行第二的框架(我个人排得,非权威),这个框架出彩的地方就在于它的“依赖注入”和“控制反转”.简单的说,就是在程序运行的时候才将参数注入到容器里.3.持久层框架选Hibernate和I

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

如何查看JDK以及JAVA框架的源码 设置步骤如下: 1.点 “window”-> "Preferences" -> "Java" -> "Installed JRES" 2.此时"Installed JRES"右边是列表窗格,列出了系统中的 JRE 环境,选择你的JRE,然后点边上的 "Edit...", 会出现一个窗口(Edit JRE) 3.选中rt.jar文件的这一项:“c:\pr

JAVA框架整合(struct+spring+jpa)之utf8mb4

基于mysql数据库整合框架时出现的数据库字符编码的问题. 解决办法:数据库驱动的版本太高,换成低版本的,主要还是你的架包太不是最新版本,出现的兼容性问题. JAVA框架整合(struct+spring+jpa)之utf8mb4,布布扣,bubuko.com

最简单的Java框架

框架framework的目的是定义骨架式方案,处理各种相同的底层细节:而开发人员使用框架时,能够依照自己的需求实现自己的功能--仅仅须要填入自己的东西/flesh. 最简单的框架,类似于JUnit,它有一个main(String[] args)启动本框架.假设是applet或GUI框架,就有太多底层细节须要处理. package principle.callback.lower; /** * 最简单的Java框架 * * @author yqj2065 * @version 2014.10 */

3.1 Java以及Lucene的安装与配置

Lucene是Java开发的一套用于全文检索和搜索的开源程序库,它面向对象多层封装,提供了一个低耦合.与平台无关的.可进行二次开发的全文检索引擎架构,是这几年最受欢迎的信息检索程序库[1].对Lucene的进一步了解可以参照Lucene更详细的资料以及Lucene6.2.1的官方文档. 由于Lucene开源且具有强大完备的功能,我们的项目儿童搜索引擎选择在Lucene的基础上进行二次开发和个性化定制. 在进行具体工程之前,我们要做好准备工作--java以及Lucene的安装和配置.本文讲述的安装

Java框架服务

Java从诞生到现在,一路飙升,可以说红遍全球,红到发紫.随着Java的流行,促生了许多java框架:Spring.WebWork.Struts.HIbernate.JDiy.JFinal.Quartz.Welocity.IBATIS.Compiere ERP&CRM Spring Framework[Java开源J2EE框架] Spring是一个解决了许多在J2EE开发中常见的问题的强大框架.Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯.Spring

将网页另存为图片的Java框架

首先要了解的是java在图像这一块非常弱.用java实现截图倒不难,原理吗就是把当前屏幕存成一个图,然后获取鼠标拉去的想去位置然后把截取的图保存到panel里边,再生成图片即可.那么这里要说什么呢?好吧下面就说几个将网页保存为图片的框架: 1.html2image 网上炒这个还不少呢.我说这个就是原声的java代码进行封装的一个jar包.效果非常差,代码就不贴了网上好多. 2.cobra 如果你不知道这个的话,你应该听说过lobobrowser,纯java实现的浏览器,测试了下,除了启动慢的要死

如何在Eclipse中查看JDK以及Java框架的源码

对于Java程序员来说,有时候是需要查看JDK或者一些Java框架的源码来分析问题的,而默认情况下,你按住Ctrl,再点击 Java本身的类库(例如ArrayList)是无法查看源码的,那么如何在Eclipse中查看JDK以及Java框架的源码呢?下面,跟着我 一起,一步步带你走进源码的世界. 方法一:快速简单 第一步: 打开你的Eclipse,然后随便找一个Java文件,随便找一个Java类库,比如String什么的,然后按住Ctrl,再点击它,你会发现跳到如下界面: 你会发现报错了:Sour