`
mengjingji
  • 浏览: 4544 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

lucence入门 demo

阅读更多

package com.ameng.lucence;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;

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.LongField;
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.index.Term;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
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.FSDirectory;
import org.apache.lucene.util.Version;

public class HelloWorld {
    public void createIndex() throws Exception {
        File file =new File("E:\\resource\\work\\documents\\share\\front\\js\\jbox-2.3\\index.html");
         Directory dir = FSDirectory.open(new File("D:\\temp\\lucence"));
        Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_4_9);
        IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_4_9, analyzer);

          if (true) {
            // Create a new index in the directory, removing any
            // previously indexed documents:
            iwc.setOpenMode(OpenMode.CREATE);
          } else {
            // Add new documents to an existing index:
            iwc.setOpenMode(OpenMode.CREATE_OR_APPEND);
          }
        IndexWriter writer = new IndexWriter(dir, iwc);
        FileInputStream fis;
        try {
          fis = new FileInputStream(file);
        } catch (FileNotFoundException fnfe) {
          // at least on windows, some temporary files raise this exception with an "access denied" message
          // checking if the file can be read doesn't help
          return;
        }
        try {

              // make a new, empty document
              Document doc = new Document();

              // Add the path of the file as a field named "path".  Use a
              // field that is indexed (i.e. searchable), but don't tokenize
              // the field into separate words and don't index term frequency
              // or positional information:
              Field pathField = new StringField("path", file.getPath(), Field.Store.YES);
              doc.add(pathField);

              // Add the last modified date of the file a field named "modified".
              // Use a LongField that is indexed (i.e. efficiently filterable with
              // NumericRangeFilter).  This indexes to milli-second resolution, which
              // is often too fine.  You could instead create a number based on
              // year/month/day/hour/minutes/seconds, down the resolution you require.
              // For example the long value 2011021714 would mean
              // February 17, 2011, 2-3 PM.
              doc.add(new LongField("modified", file.lastModified(), Field.Store.NO));

              // Add the contents of the file to a field named "contents".  Specify a Reader,
              // so that the text of the file is tokenized and indexed, but not stored.
              // Note that FileReader expects the file to be in UTF-8 encoding.
              // If that's not the case searching for special characters will fail.
              doc.add(new TextField("contents", new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8))));

              if (writer.getConfig().getOpenMode() == OpenMode.CREATE) {
                // New index, so we just add the document (no old document can be there):
                System.out.println("adding " + file);
                writer.addDocument(doc);
              } else {
                // Existing index (an old copy of this document may have been indexed) so
                // we use updateDocument instead to replace the old one matching the exact
                // path, if present:
                System.out.println("updating " + file);
                writer.updateDocument(new Term("path", file.getPath()), doc);
              }
             
            } finally {
              fis.close();
            }
        writer.close();
       
    }
   
    public void search() throws Exception {
        String field="contents";
        String queryString="html";
        IndexReader reader = DirectoryReader.open(FSDirectory.open(new File("D:\\temp\\lucence")));
        IndexSearcher searcher = new IndexSearcher(reader);
        Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_4_9);
        QueryParser parser = new QueryParser(Version.LUCENE_4_9, field, analyzer);
        Query query = parser.parse(queryString);
        System.out.println("Searching for: " + query.toString(field));
        int hitsPerPage=10;
        TopDocs results = searcher.search(query, 5 * hitsPerPage);
        ScoreDoc[] hits = results.scoreDocs;
       
        int numTotalHits = results.totalHits;
        System.out.println(numTotalHits);
        for (int i = 0; i < hits.length; i++) {
            if (false) {                              // output raw format
              System.out.println("doc="+hits[i].doc+" score="+hits[i].score);
              continue;
            }

            Document doc = searcher.doc(hits[i].doc);
            String path = doc.get("path");
            if (path != null) {
              System.out.println((i+1) + ". " + path);
              String title = doc.get("title");
              if (title != null) {
                System.out.println("   Title: " + doc.get("title"));
              }
            } else {
              System.out.println((i+1) + ". " + "No path for this document");
            }
                     
          }
    }
   
    public static void main(String[] args) throws Exception {
        HelloWorld helloWorld=new HelloWorld();
        //helloWorld.createIndex();
        helloWorld.search();
    }
   
}

分享到:
评论

相关推荐

    Lucene入门demo

    这个“Lucene入门demo”将帮助我们理解如何使用 Lucene 进行基本的索引和搜索操作。 **一、Lucene 的核心概念** 1. **索引(Indexing)**: 在 Lucene 中,索引是文档内容的预处理结果,类似于数据库中的索引。通过...

    lucene入门demo

    里面编写了法创建,搜索的基本方法 LuceneDemo 单个文件索引,创建查找 CopyFile 为多文件复制多些文件做准备 CreateIndexe 多文件创建索引;Searcher多文件搜索对应CreateIndexe

    lucene_demo例子

    《Lucene实战(第2版) PDF高清中文版.pdf》这本书是关于Apache Lucene的一本经典教程,适合初学者入门。Lucene是一个全文搜索引擎库,它提供了强大的文本搜索功能,被广泛应用于各种信息检索系统中。这本书详细介绍了...

    lucene3.0.0 入门DEMO

    在这个"lucene3.0.0 入门DEMO"中,我们将探讨如何使用 Lucene 3.0.0 版本进行基本操作。 首先,让我们了解Lucene的核心概念: 1. **索引**:在Lucene中,索引是文档内容的预处理结果,类似于数据库中的索引,用于...

    luceneDemo(完整代码)

    《LuceneDemo(完整代码):入门到精通的探索》 Lucene,作为Apache软件基金会的一个开源项目,是Java环境中最流行的全文检索库。它提供了一个高性能、可扩展的信息检索服务,广泛应用于搜索引擎开发和大数据分析中...

    Lucene常用的Demo

    这个示例是入门Lucene的首选,它展示了如何创建一个新的索引并执行基本的搜索。首先,你需要定义一个`Document`对象,包含要索引的字段,如标题、内容等。然后使用`Directory`(如`FSDirectory`)打开存储索引的...

    apache lucene 4.10.0入门单元测试代码demo

    总结了一些实用的demo 包括: 1.建立索引 2.通过IKAnalyzer搜索中文关键词 3.复杂的多字段搜索 4.多线程并发搜索,通过contiperf测试,详见:contiperf_百度百科 5.分页搜索 注意:lucene4.10.0需要jdk1.7以上...

    lucene4.4 Demo事例

    《Lucene 4.4 实战教程:从基础到进阶》 Lucene是一个高性能、全文本搜索引擎库,由Apache软件基金会开发。...这个Demo案例旨在引导你入门,希望你在学习Lucene的旅程中找到乐趣,不断提高你的搜索引擎开发能力。

    lucene入门体会

    Lucene 的入门通常从运行官方提供的Demo开始。首先,确保你已经下载并解压了最新版本,例如 lucene-2.2.0。你需要在classpath中配置 lucene-demos-2.2.0.jar 和 lucene-core-2.2.0.jar 的路径。在C盘根目录下创建两...

    Lucenedemo

    《Lucene入门实战:构建基础检索功能》 在信息技术领域,全文搜索引擎的开发与应用是不可或缺的一部分,而Apache Lucene正是这样一个强大的全文检索库。本文将通过“Lucenedemo”项目,带你走进Lucene的世界,了解...

    Lucene入门示例

    **Lucene入门示例** Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。它提供了文本分析、索引创建、文档检索等核心功能,广泛应用于各种搜索应用的开发。本文将从一个简单的Lucene入门示例出发,...

    Lucene Demo

    **入门级 Lucene Demo** "Lucene Demo" 应该是一个简单的示例项目,旨在帮助初学者快速了解如何使用 Lucene。这个 Demo 可能包括以下步骤: 1. **创建索引**:首先,程序会读取一组文档(可能是文本文件或数据库...

    lucene 3.0 入门实例

    doc.add(new Field("title", "Lucene入门", Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("content", "这是Lucene 3.0的实例", Field.Store.YES, Field.Index.ANALYZED)); ``` 3. **查询...

    Apache Lucene3.0 入门实例介绍

    这个入门实例将引导我们了解如何使用Lucene 3.0版本进行基本的索引和搜索操作。以下是对Lucene 3.0关键知识点的详细讲解: 1. **Lucene的架构**: Lucene的核心组件包括文档(Document)、字段(Field)、索引...

    Lucene快速入门

    ### Lucene快速入门知识点 #### 1. Lucene简介 ##### 1.1 Lucene的历史 - **创始人**: Lucene由一位资深的全文索引/检索专家开发。 - **开源历程**: 最初发布在其个人主页上,2001年10月捐赠给Apache基金会,成为...

    Lucene3教程

    Lucene入门文档,包含索引的创建、查询、更新以及删除demo,各个常用类的详解

    全文检索系统(Lucene)

    `LuceneDemoSrc`可能是包含一个Lucene入门示例项目的压缩文件,它可能包括以下部分: 1. **源码**:展示了如何创建和使用Lucene索引,以及如何执行搜索。 2. **配置文件**:可能包含Analyzer的配置,用于定制化分词...

Global site tag (gtag.js) - Google Analytics