文档章节

Lucene入门建立索引和搜索

maozhibin
 maozhibin
发布于 2017/07/04 22:36
字数 534
阅读 3
收藏 0

    Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎.

    下面让我们看看它的基本使用方法.

public class HellowLuence {
    /**
     * 建立索引
     */
    public void index() {
        // 1、创建Directory
        // Directory directory = new RAMDirectory();// 建立在内存中的
        Directory directory = null;
        try {
            directory = FSDirectory.open(new File("D:/index"));// 创建在硬盘中
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        // 2、创建IndexWriter
        IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35));
        IndexWriter writer = null;

        try {
            writer = new IndexWriter(directory, iwc);

            // 3、创建Document对象
            Document doc = null;
            // 4、位Docuent 添加Field
            File f = new File("D:/lucene");
            for (File file : f.listFiles()) {
                doc = new Document();
                doc.add(new Field("content", new FileReader(file)));
                doc.add(new Field("filename", file.getName(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                doc.add(new Field("path", file.getAbsolutePath(), Field.Store.YES, Field.Index.NOT_ANALYZED));

                // 5通过IndexWriter添加文档到索引中
                writer.addDocument(doc);
            }
        } catch (CorruptIndexException e) {
            e.printStackTrace();
        } catch (LockObtainFailedException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (CorruptIndexException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

 

    /**
     * 搜索
     */
    public void searcher() {
        // 1.创建Directory
        try {
            Directory directory = FSDirectory.open(new File("D:/index"));
            // 2.创建IndedxReaer
            IndexReader reader = IndexReader.open(directory);
            // 3.根据IndexReader创建IndexSearcher
            IndexSearcher searcher = new IndexSearcher(reader);
            // 4.创建搜索Query
            // 创建parser来确定要搜索文件的内容,第二个参数表示要搜索的域
            QueryParser parser = new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));
            // 创建query,表示搜索域为content中包含java的文档
            Query query = parser.parse("太多");
            // 5.根据searcher搜索并且返回TopDocs
            TopDocs tds = searcher.search(query, 10);
            // 6.根据TopDocs获取ScoreDoc对象
            ScoreDoc[] sds = tds.scoreDocs;
            for (ScoreDoc sd : sds) {
                Document d = searcher.doc(sd.doc);
                System.out.println(d.get("filename") + "[" + d.get("path") + "]");
            }
            // 关闭reader
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}
 

方法写完后进行测试

public class test {
    @Test
    public void test1() {
        HellowLuence hellowLuence = new HellowLuence();
        hellowLuence.index();
    }

运行结果

    @Test
    public void test2() {
        HellowLuence hellowLuence = new HellowLuence();
        hellowLuence.searcher();
    }

}

© 著作权归作者所有

上一篇: 策略模式
下一篇: 代理模式
maozhibin

maozhibin

粉丝 0
博文 4
码字总数 1353
作品 0
杭州
私信 提问
打造自己的搜索引擎

这周项目要做一个搜索引擎系统,于是,我看看了看上下左右,看来只有我来弄了~~ 代码其中参考了@红薯的Lucene 早年分享的代码,与一些朋友的精华博客。算是入门了,这个入门花了我40篇日志。...

linapex
2015/11/26
184
0
Lucene第一个入门学习例子

看Lucene in Action的时候,练习的一个入门例子。 在使用Lucene进行文本内容搜索前,需要先对指定的目录下的文件进行建立索引,代码如下: import java.io.File;import java.io.FileFilter;...

f1024557668
2018/06/29
0
0
Lucene第一个入门学习例子

看Lucene in Action的时候,练习的一个入门例子。 在使用Lucene进行文本内容搜索前,需要先对指定的目录下的文件进行建立索引,代码如下: import java.io.File;import java.io.FileFilter;...

f1024557668
2018/06/29
0
0
Lucene In Action 读书笔记(一)

简介 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和...

林俊龙
2013/09/04
501
1
Hibernate Search 6.0.0.Alpha6 发布,数据检索框架

Hibernate Search 6.0.0.Alpha6 发布了。此版本主要恢复了 Lucene 索引良好的读写性能、添加了对 和索引的支持、降低了 Search DSL 的冗长程度,并添加了对自动索引配置 on-commit 同步的支持...

xplanet
05/29
571
0

没有更多内容

加载失败,请刷新页面

加载更多

lopatkin俄大神Windows精简版系统 安装教程 简单版

1.制作U盘启动盘 或 安装pe到电脑 下载微pe工具箱.(为什么用这个呢,因为这个无毒,无广告,无后门.其它pe在安装完系统会安装一堆木马,垃圾软件,后门什么的) pe制作工具下载http://www.wepe.com...

xiaogg
18分钟前
3
0
【0917】Linux shell基础知识2

【0917】Linux shell基础知识2 8.7/8.8 shell变量 8.9 环境变量配置文件 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号 一、shell变量 1、使用...

飞翔的竹蜻蜓
20分钟前
3
0
管理角色认知-新晋管理常常犯的错

背景 管理是一门实践科学,从知道到做到,需要长时间的刻意练习,提前知道那些坑,可以提前规避。 坑1:被动执行 现象: 不主动找活干,等上级派活; 上级有了安排,指望上级替他决定实现方案...

春天spring
22分钟前
4
0
MongoDB4.0.2集群搭建

MongoDB4.0.2集群搭建 2019.02.01 01:02 619浏览 MongoDB4.0.2集群搭建 根据对象存储平台Django+MongoDB+Ceph的需求,现搭建部署一个十节点的MongoDB集群,主要以下关键点: 根据最新版本Mon...

linjin200
25分钟前
4
0
面试官问你B树和B+树,就把这篇文章丢给他

原文链接:面试官问你B树和B+树,就把这篇文章丢给他 1 B树 在介绍B+树之前, 先简单的介绍一下B树,这两种数据结构既有相似之处,也有他们的区别,最后,我们也会对比一下这两种数据结构的区...

欧阳思海
29分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部