`

lucene实例二

阅读更多
说明一下,这一篇文章的用到的lucene,是用2.0版本的,主要在查询的时候2.0版本的lucene与以前的版本有了一些区别.
其实这一些代码都是早几个月写的,自己很懒,所以到今天才写到自己的博客上,高深的文章自己写不了,只能记录下一些简单的记录与点滴,其中的代码算是自娱自乐的,希望高手不要把重构之类的砸下来...

1、在windows系统下的的C盘,建一个名叫s的文件夹,在该文件夹里面随便建三个txt文件,随便起名啦,就叫"1.txt","2.txt"和"3.txt"啦
其中1.txt的内容如下:
Java代码
中华人民共和国  
全国人民  
2006年 

中华人民共和国
全国人民
2006年
而"2.txt"和"3.txt"的内容也可以随便写几写,这里懒写,就复制一个和1.txt文件的内容一样吧

2、下载lucene包,放在classpath路径中
建立索引:
Java代码
package lighter.iteye.com;  
 
import java.io.BufferedReader;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.util.Date;  
 
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.index.IndexWriter;  
 
/** 
* author lighter date 2006-8-7 
*/ 
public class TextFileIndexer {  
    public static void main(String[] args) throws Exception {  
        /* 指明要索引文件夹的位置,这里是C盘的S文件夹下 */ 
        File fileDir = new File("c:\\s");  
 
        /* 这里放索引文件的位置 */ 
        File indexDir = new File("c:\\index");  
        Analyzer luceneAnalyzer = new StandardAnalyzer();  
        IndexWriter indexWriter = new IndexWriter(indexDir, luceneAnalyzer,  
                true);  
        File[] textFiles = fileDir.listFiles();  
        long startTime = new Date().getTime();  
          
        //增加document到索引去  
        for (int i = 0; i < textFiles.length; i++) {  
            if (textFiles[i].isFile()  
                    && textFiles[i].getName().endsWith(".txt")) {  
                System.out.println("File " + textFiles[i].getCanonicalPath()  
                        + "正在被索引....");  
                String temp = FileReaderAll(textFiles[i].getCanonicalPath(),  
                        "GBK");  
                System.out.println(temp);  
                Document document = new Document();  
                Field FieldPath = new Field("path", textFiles[i].getPath(),  
                        Field.Store.YES, Field.Index.NO);  
                Field FieldBody = new Field("body", temp, Field.Store.YES,  
                        Field.Index.TOKENIZED,  
                        Field.TermVector.WITH_POSITIONS_OFFSETS);  
                document.add(FieldPath);  
                document.add(FieldBody);  
                indexWriter.addDocument(document);  
            }  
        }  
        //optimize()方法是对索引进行优化  
        indexWriter.optimize();  
        indexWriter.close();  
          
        //测试一下索引的时间  
        long endTime = new Date().getTime();  
        System.out  
                .println("这花费了" 
                        + (endTime - startTime)  
                        + " 毫秒来把文档增加到索引里面去!" 
                        + fileDir.getPath());  
    }  
 
    public static String FileReaderAll(String FileName, String charset)  
            throws IOException {  
        BufferedReader reader = new BufferedReader(new InputStreamReader(  
                new FileInputStream(FileName), charset));  
        String line = new String();  
        String temp = new String();  
          
        while ((line = reader.readLine()) != null) {  
            temp += line;  
        }  
        reader.close();  
        return temp;  
    }  


package lighter.iteye.com;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;

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.index.IndexWriter;

/**
* author lighter date 2006-8-7
*/
public class TextFileIndexer {
public static void main(String[] args) throws Exception {
/* 指明要索引文件夹的位置,这里是C盘的S文件夹下 */
File fileDir = new File("c:\\s");

/* 这里放索引文件的位置 */
File indexDir = new File("c:\\index");
Analyzer luceneAnalyzer = new StandardAnalyzer();
IndexWriter indexWriter = new IndexWriter(indexDir, luceneAnalyzer,
true);
File[] textFiles = fileDir.listFiles();
long startTime = new Date().getTime();

//增加document到索引去
for (int i = 0; i < textFiles.length; i++) {
if (textFiles[i].isFile()
&& textFiles[i].getName().endsWith(".txt")) {
System.out.println("File " + textFiles[i].getCanonicalPath()
+ "正在被索引....");
String temp = FileReaderAll(textFiles[i].getCanonicalPath(),
"GBK");
System.out.println(temp);
Document document = new Document();
Field FieldPath = new Field("path", textFiles[i].getPath(),
Field.Store.YES, Field.Index.NO);
Field FieldBody = new Field("body", temp, Field.Store.YES,
Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
document.add(FieldPath);
document.add(FieldBody);
indexWriter.addDocument(document);
}
}
//optimize()方法是对索引进行优化
indexWriter.optimize();
indexWriter.close();

//测试一下索引的时间
long endTime = new Date().getTime();
System.out
.println("这花费了"
+ (endTime - startTime)
+ " 毫秒来把文档增加到索引里面去!"
+ fileDir.getPath());
}

public static String FileReaderAll(String FileName, String charset)
throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(
new FileInputStream(FileName), charset));
String line = new String();
String temp = new String();

while ((line = reader.readLine()) != null) {
temp += line;
}
reader.close();
return temp;
}
}

索引的结果:
Java代码
File C:\s\1.txt正在被索引....  
中华人民共和国全国人民2006年  
File C:\s\2.txt正在被索引....  
中华人民共和国全国人民2006年  
File C:\s\3.txt正在被索引....  
中华人民共和国全国人民2006年  
这花费了297 毫秒来把文档增加到索引里面去!c:\s 

File C:\s\1.txt正在被索引....
中华人民共和国全国人民2006年
File C:\s\2.txt正在被索引....
中华人民共和国全国人民2006年
File C:\s\3.txt正在被索引....
中华人民共和国全国人民2006年
这花费了297 毫秒来把文档增加到索引里面去!c:\s

3、建立了索引之后,查询啦....
Java代码
package lighter.iteye.com;  
 
import java.io.IOException;  
 
import org.apache.lucene.analysis.Analyzer;  
import org.apache.lucene.analysis.standard.StandardAnalyzer;  
import org.apache.lucene.queryParser.ParseException;  
import org.apache.lucene.queryParser.QueryParser;  
import org.apache.lucene.search.Hits;  
import org.apache.lucene.search.IndexSearcher;  
import org.apache.lucene.search.Query;  
 
public class TestQuery {  
    public static void main(String[] args) throws IOException, ParseException {  
        Hits hits = null;  
        String queryString = "中华";  
        Query query = null;  
        IndexSearcher searcher = new IndexSearcher("c:\\index");  
 
        Analyzer analyzer = new StandardAnalyzer();  
        try {  
            QueryParser qp = new QueryParser("body", analyzer);  
            query = qp.parse(queryString);  
        } catch (ParseException e) {  
        }  
        if (searcher != null) {  
            hits = searcher.search(query);  
            if (hits.length() > 0) {  
                System.out.println("找到:" + hits.length() + " 个结果!");  
            }  
        }  
    }  
 


package lighter.iteye.com;

import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;

public class TestQuery {
public static void main(String[] args) throws IOException, ParseException {
Hits hits = null;
String queryString = "中华";
Query query = null;
IndexSearcher searcher = new IndexSearcher("c:\\index");

Analyzer analyzer = new StandardAnalyzer();
try {
QueryParser qp = new QueryParser("body", analyzer);
query = qp.parse(queryString);
} catch (ParseException e) {
}
if (searcher != null) {
hits = searcher.search(query);
if (hits.length() > 0) {
System.out.println("找到:" + hits.length() + " 个结果!");
}
}
}

}

其运行结果:

引用
找到:3 个结果!

文章来自:http://lighter.iteye.com。
分享到:
评论

相关推荐

    lucene全文搜素实例 java lucene 实例

    ### 二、Java Lucene 实例步骤 1. **初始化索引目录**:首先,我们需要创建一个目录来存储索引。这通常通过 `FSDirectory.open()` 方法完成。 2. **创建索引**: - 创建 `IndexWriter` 对象,配置分析器和其他...

    lucene实例(包括分页、中文检索等)

    lucene实例是一个比较详细的例子,包括lucene的入门到高级实例,代码里有比较详细的实例,所有的实例都是通过junit来测试的。实例包括各种搜索:如通配符查询、模糊查询、查询结果的分页、中文分词器、自定义分词器...

    lucene实例

    这个"lucene实例"的压缩包文件很可能是为了演示或教学如何使用Lucene进行文本检索和分析。Lucene的核心功能包括文档索引、搜索、排序以及相关性评分等,它被广泛应用于各种信息检索系统中,如网站搜索、企业内部信息...

    Java搜索工具——Lucene实例总结(一)

    Java搜索工具——Lucene实例总结(一) 在Java开发中,搜索引擎已经成为不可或缺的一部分,而Apache Lucene正是一个强大的全文搜索引擎库。这篇博文将带你深入理解Lucene的基本概念和使用方式,帮助你快速入门并掌握...

    Lucene索引器实例

    **Lucene索引器实例详解** Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,被广泛应用于各种搜索引擎的构建。它提供了一个高级的、灵活的、可扩展的接口,使得开发者能够轻松地在应用程序中实现全文...

    经典的lucene实例代码及详细解析以及lucene结构流程介绍

    经典的Lucene实例代码及详细解析以及Lucene结构流程介绍 Lucene是一个功能强大且灵活的开源搜索引擎库,它提供了一个简单易用的API,允许开发者快速构建搜索应用程序。下面将对Lucene的实例代码和结构流程进行详细...

    Lucene搜索实例

    **Lucene 搜索实例** Apache Lucene 是一个高性能、全文本搜索引擎库,它为开发者提供了在各种应用程序中实现全文检索的工具集。Lucene 并不是一个完整的应用,而是一个 Java 类库,可以被其他 Java 应用程序所使用...

    LUCENE实例

    CreateLucene.java 增量生成索引 CreateLuceneAll.java 全量生成索引 CreateLuceneInter.java 按照时间区间生成索引 里面为参考代码,使用lucene-core-2.9.0.jar

    lucene实例项目及其打包文件

    **Lucene实例项目及其打包文件详解** Lucene是一款强大的全文搜索引擎库,由Apache软件基金会开发,广泛应用于各种信息检索系统。这个实例项目是基于Lucene官网提供的,旨在帮助开发者更好地理解和使用Lucene进行...

    lucene3 例子

    【标题】:“Lucene3 实例解析” 在深入探讨Lucene3这个主题之前,我们先来了解一下Lucene是什么。Lucene是一个开源的全文检索库,由Apache软件基金会开发,广泛应用于各种信息检索系统中,包括搜索引擎、内容管理...

    Lucene.NET 实例

    2. **字段和分析**:在 Lucene 中,每个字段都有其特定的属性,如是否被索引、是否被存储等。`Field` 类用于定义这些属性。同时,数据需要经过分析(Analyzer)处理,转换成一系列的关键词。例如,`StandardAnalyzer...

    一个关于lucene实例

    在这个"一个关于lucene实例"的压缩包中,很可能是为了帮助初学者理解并掌握Lucene的基本用法和核心概念。 Lucene的主要功能包括文档的索引和搜索。在索引过程中,它能够分析文本,将文本分词,然后将这些词语转换为...

    Lucene使用代码实例之搜索文档

    《Lucene使用代码实例之搜索文档》 Lucene是一个高性能、全文检索库,它提供了强大的文本分析和索引功能,广泛应用于搜索引擎开发和其他需要高效文本处理的场景。本篇文章主要面向初学者,通过实例详细解释如何使用...

    Lucene简单实例记录

    从给定的文件信息中,我们可以提取出关于Apache Lucene的基本使用和实例的详细知识点,以下是对这些知识点的深入解析: ### Lucene简介 Apache Lucene是一个高性能、全功能的文本搜索引擎库,由Java编写,提供了对...

    ssh+lucene搜索实例

    在这个"ssh+lucene搜索实例"中,我们可以理解为结合了SSH和Lucene两个技术,以实现远程服务器上的全文检索功能。例如,可能有一个需求是在多个远程服务器上存储大量数据,而这些数据需要通过关键词进行快速搜索。在...

    lucene 4.8 实例

    二、Lucene 4.8 的新特性与改进 1. 更强的性能优化:Lucene 4.8 在索引和查询速度上进行了优化,提高了整体效率。 2. 分词器更新:对各种语言的分词器进行了升级,尤其是中文分词器,增强了对现代汉语的处理能力。...

Global site tag (gtag.js) - Google Analytics