`
wangyi529
  • 浏览: 35107 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类

apache lucene 一个最简单的实例

阅读更多
就像每个程序都有一个Hello World来让人体验它一样,lucene也可以很简单的提供一个实例。如下(来自lucene in action的例子)有两个类组成:
一个是建立索引
package my;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Date;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;

public class Indexer {
    public static void main(String[] args) throws Exception {
        if (args.length != 2) {
            throw new Exception("Usage: java " + Indexer.class.getName()
                    + " <index dir> <data dir>");
        }
        File indexDir = new File(args[0]);
        File dataDir = new File(args[1]);
        long start = new Date().getTime();
        int numIndexed = index(indexDir, dataDir);
        long end = new Date().getTime();
        System.out.println("Indexing " + numIndexed + " files took "
                + (end - start) + " milliseconds");
    }

    // open an index and start file directory traversal
    public static int index(File indexDir, File dataDir) throws IOException {
        if (!dataDir.exists() || !dataDir.isDirectory()) {
            throw new IOException(dataDir
                    + " does not exist or is not a directory");
        }
        IndexWriter writer = new IndexWriter(indexDir, new StandardAnalyzer(),
                true);
        writer.setUseCompoundFile(false);
        indexDirectory(writer, dataDir);
        int numIndexed = writer.docCount();
        writer.optimize();
        writer.close();
        return numIndexed;
    }

    // recursive method that calls itself when it finds a directory
    private static void indexDirectory(IndexWriter writer, File dir)
            throws IOException {
        File[] files = dir.listFiles();
        for (int i = 0; i < files.length; i++) {
            File f = files[i];
            if (f.isDirectory()) {
                indexDirectory(writer, f);
            } else if (f.getName().endsWith(".txt")) {
                indexFile(writer, f);
            }
        }
    }

    // method to actually index file using Lucene
    private static void indexFile(IndexWriter writer, File f)
            throws IOException {
        if (f.isHidden() || !f.exists() || !f.canRead()) {
            return;
        }
        System.out.println("Indexing " + f.getCanonicalPath());
        Document doc = new Document();
        doc.add(Field.Text("contents", new FileReader(f)));
        doc.add(Field.Keyword("filename", f.getCanonicalPath()));
        writer.addDocument(doc);
    }
}
另一个是搜索:
package my;

import java.io.File;
import java.util.Date;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

public class Searcher {
    public static void main(String[] args) throws Exception {
        if (args.length != 2) {
            throw new Exception("Usage: java " + Searcher.class.getName()
                    + " <index dir> <auery>");
        }
        File indexDir = new File(args[0]);
        String q = args[1];
        if (!indexDir.exists() || !indexDir.isDirectory()) {
            throw new Exception(indexDir
                    + " does not exist or is not a directory.");
        }
        search(indexDir, q);
    }

    public static void search(File indexDir, String q) throws Exception {
        Directory fsDir = FSDirectory.getDirectory(indexDir, false);
        IndexSearcher is = new IndexSearcher(fsDir);
        Query query = QueryParser.parse(q, "contents", new StandardAnalyzer());
        long start = new Date().getTime();
        Hits hits = is.search(query);
        long end = new Date().getTime();
        System.err.println("Found " + hits.length() + " document(s) (in "
                + (end - start) + " milliseconds) that matched query ‘" + q
                + "’:");
        for (int i = 0; i < hits.length(); i++) {
            Document doc = hits.doc(i);
            System.out.println(doc.get("filename"));
        }
    }
}
ok,这样就简单实现了,在搜索目录下所有txt,找出包括某一个字符串的txt文件名的功能。
分享到:
评论

相关推荐

    apache下的lucene教程

    - **Lucene定义**:Lucene是一款高性能、全功能的文本搜索引擎库,由Java编写而成,是Apache基金会下的一个开源项目。 - **发展历程**:自1999年由Doug Cutting创建以来,Lucene已经发展成为全球最广泛使用的全文...

    第一个lucene的简单实例....

    标题 "第一个lucene的简单实例" 提到的是关于Apache Lucene的初步应用,这是一个全文搜索引擎库,常用于Java开发中。Lucene提供了高效的文本搜索功能,使得开发者能够快速地在大量数据中查找相关信息。 描述中的 ...

    Lucene+HighLighter高亮显示实例

    《Lucene+HighLighter高亮显示实例解析》 在信息技术领域,搜索引擎的构建与优化是至关重要的一环,其中,如何有效地对搜索结果进行高亮...无论是简单的个人项目还是大型企业级应用,Lucene都是一个值得信赖的选择。

    lucene实例lucene实例

    1. 复合段(Compound Segment):为了提高检索效率,Lucene会合并多个小段成一个大段。 2. 倒排索引(Inverted Index):Lucene的核心数据结构,它将词典映射到包含该词的文档集合。 3. 评分系统(Scoring):...

    lucene实现企业搜索实例

    Apache Lucene是一个开源的全文检索库,它提供了强大的文本搜索功能,能够帮助企业构建自己的搜索引擎。下面我们将深入探讨如何使用Lucene来实现企业级的搜索实例。 首先,我们需要理解Lucene的基本架构。Lucene的...

    lucene5的一个简单Demo

    Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发并维护。它提供了高级的索引和搜索功能,广泛应用于各种信息检索系统。在这个“lucene5的一个简单Demo”中,我们将深入探讨如何使用 Lucene 5.x 版本...

    lucene与sqlserver数据库实现索引的简单实例

    Lucene是一个由Apache软件基金会开发的全文检索库,它提供了一个高级的、可扩展的、基于Java的搜索程序库。Lucene的核心功能包括文档的索引、存储、搜索以及相关的处理,如分词、过滤等。它的优点在于灵活性高,可以...

    Lucene简单实例

    Lucene是Apache软件基金会的一个开源项目,它是一个高性能、全文本搜索库。这个库提供了索引和搜索文本的高级功能,使得开发者能够轻松地在应用程序中实现强大的搜索功能。Lucene最初由Doug Cutting开发,现在已经...

    lucene3.0 实例

    Lucene 是一个开源的全文检索库,由 Apache 软件基金会开发,它为 Java 开发人员提供了强大的文本搜索功能。在 Lucene 3.0 版本中,虽然已经相对较旧,但仍然包含了基本的搜索引擎功能,适用于简单或特定场景的搜索...

    Lucene索引搜索简介以及入门实例源码.rar

    Lucene是Apache软件基金会下的一个开源全文搜索引擎库,它提供了高性能、可扩展的文本搜索功能。Lucene并不是一个完整的搜索引擎,而是一个工具集,允许开发人员在自己的应用程序中实现搜索功能。这个压缩包中的内容...

    lasticsearch(简称ES)是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Luce

    Lucene 被认为是当前最先进、性能最佳且功能最全面的搜索引擎库之一。 #### 二、主要特点与优势 - **Java 编写**:ES 使用 Java 语言编写,便于跨平台部署和维护。 - **RESTful API**:提供了简单易用的 RESTful ...

    Lucene初探,一个初级的LuceneDemo

    接下来,我们来看看如何创建一个简单的LuceneDemo: 1. **引入依赖**:首先,你需要在项目中引入Lucene的依赖库。对于Java项目,可以通过Maven或Gradle添加相应的依赖项。 2. **创建索引**:创建一个`Directory`...

    lucene小实例文件检索

    这个“lucene小实例文件检索”旨在为初学者提供一个简单但完整的文件检索功能实现,帮助理解Lucene的基本工作原理和使用方法。 在Lucene中,文件检索主要涉及以下几个核心概念: 1. **索引(Index)**:在Lucene中...

    lucene2.9.1src源码及项目实例

    Lucene提供了一个简单确强大的应用程式接口,能够做全文索引和搜寻,在Java开发环境里Lucene是一个成熟的免费开放源代码工具;就其本身而论,Lucene是现在并且是这几年,最受欢迎的免费java资讯检索程式库。人们经常...

    简单的lucene demo

    Lucene是一个强大的全文搜索引擎库,由Apache软件基金会开发并维护,它在Java编程语言中实现,广泛应用于各种搜索应用的构建。这个“简单的lucene demo”旨在向我们展示如何利用Lucene进行基础的文本索引和搜索操作...

    第一个Lucene 3.6 (3.X) 入门实例

    Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发。它为Java开发者提供了强大的文本检索功能,广泛应用于搜索引擎、信息检索系统等场景。在3.6版本中,Lucene引入了诸多改进和优化,提高了搜索效率和用户...

    搜索篇:Struts、Lucene的Web实例

    Lucene提供了一个简单的API,用于索引和搜索文本,支持布尔查询、短语查询、模糊查询等多种查询方式。在Web环境中,Lucene通常与Servlets或现代Web框架(如Spring MVC或Struts)结合使用,以实现动态网站的实时搜索...

    最新版windows lucene-8.5.1.zip

    Apache Lucene是一个开源全文搜索引擎库,它为开发者提供了在Java环境中构建全文检索应用的基础框架。在最新的8.5.1版本中,Lucene进一步提升了性能和功能,使其在Windows平台上的表现更加出色。本文将深入探讨...

    lucene搜索的简单入门例子源代码

    Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。它提供了高效的文本检索、分析和存储功能,被广泛应用于各种需要全文搜索的应用中。本篇将通过一个简单的入门例子,带你了解如何使用Lucene进行...

Global site tag (gtag.js) - Google Analytics