`

开始学习lucene

阅读更多
lucene in action的第一章的例子 ,初体验 哈哈

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;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

import java.io.*;

/**
 * lucene 学习的一个例子s
 * User: zhangyong
 * Date: 12-7-12
 * Time: 下午9:35
 * To change this template use File | Settings | File Templates.
 */
public class Indexer {

    private IndexWriter writer;

    public Indexer(String indexDir) throws IOException {
        Directory dir = FSDirectory.open(new File(indexDir));
        writer = new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_36), true, IndexWriter.MaxFieldLength.UNLIMITED);
    }

    public void close() throws IOException {   //关闭 indexWriter
        writer.close();
    }

    public int index(String dataDir, FileFilter filter) throws Exception {
        File[] files = new File(dataDir).listFiles();
        for (File f : files) {
            if (!f.isDirectory() && !f.isHidden() && f.exists() && f.canRead()) {
                indexFile(f);
            }
        }
        return writer.numDocs();
    }

    public static class TextFilesFilter implements FileFilter {
        public boolean accept(File path) {
            return path.getName().toLowerCase().endsWith(".txt");
        }
    }

    protected Document getDocument(File f) throws Exception {
        Document doc = new Document();
   //     doc.add(new Field("content", new FileReader(f)));
        doc.add(new Field("content", new InputStreamReader(new FileInputStream(f.getCanonicalPath()), "utf-8")));
        doc.add(new Field("fileName", f.getName(), Field.Store.YES, Field.Index.NOT_ANALYZED));
        return doc;
    }

    public void indexFile(File f) throws Exception {
        System.out.println("indexing " + f.getCanonicalPath());
        Document doc = getDocument(f);
        writer.addDocument(doc);
    }

    public static void main(String[] args) throws Exception {
        String dir = "E:\\lucene";
        String dataDir = "E:\\lucene\\data";
        long start = System.currentTimeMillis();
        Indexer indexer = new Indexer(dir);
        int numIndexed;

        try {
            numIndexed = indexer.index(dataDir, new TextFilesFilter());
        } finally {
              indexer.close();
        }
        long end = System.currentTimeMillis();
        System.out.println("cost time==" + (end - start));
    }

}




package com.diyicai.share.search.test;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.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.FSDirectory;
import org.apache.lucene.util.Version;

import java.io.File;
import java.io.IOException;

/**
 * 例子 1.2
 * User: zhangyong
 * Date: 12-7-14
 * Time: 下午7:37
 * To change this template use File | Settings | File Templates.
 */
public class Searcher {

    public static void main(String[] args) throws IOException, ParseException {
        String indexDir = "E:\\lucene";
        String q = "start";
        search(indexDir,q);
    }

    public static void search(String indexDir, String q) throws IOException, ParseException {

        Directory dir = FSDirectory.open(new File(indexDir));

        IndexSearcher is = new IndexSearcher(dir);

        QueryParser parser = new QueryParser(Version.LUCENE_36, "content", new StandardAnalyzer(Version.LUCENE_36));

        Query query = parser.parse(q);

        long start = System.currentTimeMillis();

        TopDocs hits = is.search(query, 10);

        long end = System.currentTimeMillis();

        System.out.println("find " + hits.totalHits);

        for (ScoreDoc scoreDoc : hits.scoreDocs) {
            Document doc = is.doc(scoreDoc.doc);
            System.out.println(doc.get("fileName"));
        }
    }

}


分享到:
评论

相关推荐

    lucene1.4.3.jar

    《深入剖析Lucene 1.4.3:源码解析与应用实践》 Apache Lucene 是一个开源全文搜索引擎库,自1999年诞生以来,它为开发者提供了强大的...对于那些希望从基础开始学习Lucene的开发者,这份资料无疑是宝贵的参考资料。

    lucene教程大全包括实例源码

    Lucene是中国最流行的全文搜索...通过本教程大全,读者将能够从零开始学习Lucene,理解其工作原理,并能够实际操作建立索引和执行搜索。同时,结合提供的源码实例,可以帮助加深对Lucene的理解,进一步提升开发能力。

    学习lucene和nutch爬虫代码

    对于初学者来说,"学习lucene和nutch爬虫代码"这个资料包应该包含了Lucene的基本代码示例和Nutch的爬虫代码。通过阅读和理解这些代码,你可以深入了解Lucene如何建立索引、执行搜索,以及Nutch如何抓取和处理网页。...

    Lucene3.5源码jar包

    总的来说,深入学习Lucene 3.5.0的源码,可以帮助开发者掌握全文检索的核心技术,了解其内部工作原理,并能灵活应用到自己的项目中。这份源码不仅适用于初学者,也是经验丰富的开发者的宝贵参考资料。通过阅读和理解...

    lunence2.4例题

    【标签】中的关键词强调了"入门",意味着这份资料适合初学者,它将帮助他们从零开始学习Lucene。"例题"则表明这是一个实践导向的学习材料,而"最新版"可能意味着这些例子和练习反映了Lucene 2.4的最新特性或更新。 ...

    Lucene资料大全(包括Lucene_in_Action书等)

    **标题与描述解析** 标题"Lucene资料大全(包括Lucene_in_Action书等)...总的来说,这个压缩包提供了一个全面的Lucene学习路径,既有理论书籍也有实践教程,对于想要深入理解或开始使用Lucene的人来说是宝贵的资源。

    lucene-2.2.0zip

    对于初学者来说,从老版本开始学习,逐步了解其核心原理,再过渡到新版本,可以更好地掌握Lucene这一强大的搜索引擎开发工具。在实际项目中,选择适合版本的Lucene,根据需求进行定制和优化,将有助于构建出高效、...

    lucene搜索引擎项目

    "lucene搜索引擎项目"可能包含了从零开始构建一个简单搜索引擎的全程,从数据读取、索引构建,到查询处理和结果展示。这对于初学者来说,是一个极好的实践平台。 通过深入研究这个项目,开发者可以了解Lucene的...

    spring-lucene简单项目

    在"spring-lucene简单项目"中,我们将学习如何配置和使用Lucene来索引和检索数据。 项目开始时,你需要在Spring配置文件中声明Lucene的相关bean,如Analyzer(分析器)、Directory(存储索引的目录)和IndexWriter...

    Lucene+in+action中文版

    这本书详细介绍了Lucene的基本概念、核心组件以及高级应用,是学习和使用Lucene进行信息检索开发的重要参考资料。 首先,Lucene是一个开源的全文检索库,由Java编写,提供了强大的文本分析、索引和搜索功能。它允许...

    lucene实例

    通过这个"lucene实例",你可以学习如何配置和使用Lucene,理解其核心机制,并将其应用于实际项目中。如果你对压缩包内的文件进行解压并运行,你将看到具体的操作步骤和示例代码,帮助你更好地理解和掌握Lucene。

    lucene 3.6

    通过学习 Lucene 3.6,你可以掌握全文检索的核心原理,这对于构建自己的搜索引擎或者在项目中实现高效文本搜索功能至关重要。记得结合源代码分析,加深对概念的理解,同时不断实践,才能更好地掌握这一强大的搜索...

    Lucene-core-2.0.0

    6. **学习路径**: 学习Lucene可以从理解基本概念和数据结构开始,然后通过编写简单的索引和搜索程序来实践,逐步深入到高级特性,如分片、分布式搜索、性能调优等。 7. **安全注意事项**: 使用第三方库时,应确保...

    lucene全文检索教程

    在这个教程中,读者会学习到如何配置和使用Lucene,如何处理各种类型的查询,如何优化索引和搜索性能,以及如何应对实际项目中的挑战。"www.heyjava.com.url"可能指向一个相关的在线资源,供读者进一步探索和实践。 ...

    Lucene学习笔记

    在开始使用Lucene之前,需要引入相应的jar包,例如:lucene-core、lucene-memory、lucene-analyzers和lucene-highlighter等。 2.2 创建索引库 创建索引是Lucene工作的第一步,这通常涉及到以下步骤: - 指定索引...

    lucene jar包

    然而,对于学习Lucene的历史发展或者研究旧项目的人来说,这个版本依然有其价值。 3. Lucene 3.6.0: 这是Lucene的另一个较新版本,相对于1.4版本,它具有更多的功能和优化。3.6.0可能包含了对分析器的改进,支持更...

    Lucene5学习之TermVector项向量

    《Lucene5学习之TermVector项向量》 在深入理解Lucene5的搜索引擎功能时,TermVector(项向量)是一个关键的概念,它对于文本分析、信息检索和相关性计算等方面起着至关重要的作用。TermVector是Lucene提供的一种...

    Lucene.net 2.0 API + DLL 下载

    `Lucene.Net.DLL.rar`文件很可能包含了这个版本的Lucene.NET的二进制库,方便开发者快速开始使用。 另外,`Lucene.Net-2.0.doc.zip`文件可能包含的是关于Lucene.NET 2.0的文档资料,可能包括API参考、用户指南、...

Global site tag (gtag.js) - Google Analytics