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

lucene4.0索引txt文本

阅读更多
package com.searchtxt.lucene;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.TypeAttribute;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.LongField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.junit.Before;
import org.junit.Test;
import org.wltea.analyzer.lucene.IKAnalyzer;

/**
 * txt文件索引
 * @author lijunqing
 */
public class IndexFile {

    private Directory directory;

    private String indexPath = "D://lucene/index"; // 建立索引文件的目录
    
    private String dirPath = "D://lucene/test"; // txt资源目录
    
    private Analyzer analyzer = new IKAnalyzer();

    private IndexWriter indexWriter;
     
    @Before
    public void init() {
        try {
            directory=FSDirectory.open(new File(indexPath));
            indexWriter=getIndexWriter(directory);
        } catch(Exception e) {
            System.out.println("索引打开异常!");
        }
    }

    /**
     * 获得所有txt文件
     * @param dirPath
     * @return
     */
    public List<File> getFileList(String dirPath) {
        File[] files=new File(dirPath).listFiles();
        List<File> fileList=new ArrayList<File>();
        for(File file: files) {
            if(isTxtFile(file.getName())) {
                fileList.add(file);
            }
        }
        return fileList;
    }
    
    /**
     * 创建索引
     * @throws Exception
     */
    @Test
    public void  createIndex() throws Exception{
        List<File> fileList = getFileList(dirPath);
        Document document = null;
        for(File file:fileList){
          document = fileToDocument(file);
          indexWriter.addDocument(document);
          System.out.println("filename=="+document.get("filename"));
          indexWriter.commit();
        }
        closeWriter();
    }

    /**
     * 判断是否是txt文件
     * @param fileName
     * @return
     */
    public boolean isTxtFile(String fileName) {
        if(fileName.lastIndexOf(".txt") > 0) {
            return true;
        }
        return false;
    }

    /**
     * 将文件转换成Document对象
     * @param file
     * @return
     * @throws Exception
     */
    public Document fileToDocument(File file) throws Exception {
        Document document=new Document();
        document.add(new TextField("filename", file.getName(), Store.YES));
        document.add(new TextField("content", getFileContent(file), Store.YES));
        document.add(new LongField("size", file.getTotalSpace(), Store.YES));
        return document;
    }
    
    /**
     * 获得indexwriter对象
     * @param dir
     * @return
     * @throws Exception
     */
    public IndexWriter getIndexWriter(Directory dir) throws Exception {
        IndexWriterConfig iwc=new IndexWriterConfig(Version.LUCENE_40, analyzer);
        return new IndexWriter(dir, iwc);
    }
    
    /**
     * 关闭indexwriter对象
     * @throws Exception
     */
    public void closeWriter() throws Exception {
        if(indexWriter != null) {
            indexWriter.close();
        }
    }
    
    /**
     * 读取文件内容
     * @param file
     * @return
     * @throws Exception 
     */
    public String getFileContent(File file) throws Exception{
        Reader reader = new InputStreamReader(new FileInputStream(file),"GBK");
        BufferedReader br = new BufferedReader(reader);
        String result ="";
        while(br.readLine() != null){
            result = result+"\n"+br.readLine();
        }
        br.close();
        reader.close();
        return result;
    }
}
 

说明:lucene4.0中TextField()中reader参数那个源代码中是

 

 public TextField(String name, Reader reader) {
    super(name, reader, TYPE_NOT_STORED);
  }

 而TYPE_NOT_STORED的定义为:是默认不保存的。

所以就先读出文件的内容用:

 

  public TextField(String name, String value, Store store) {
    super(name, value, store == Store.YES ? TYPE_STORED : TYPE_NOT_STORED);
  }

 这个方法。

 

分享到:
评论
2 楼 iluoxuan 2012-12-06  
IKAnalyzer2012FF_u1.jar 4.0 ik分词是用的这个版本:

针对“java.lang.VerifyError”的错误原因,主要是因为jar包的版本问题导致,可能是因为部署环境存在2套以上版本

;你的.IKAnalyzer 看下你的包
1 楼 ligf06 2012-12-05  
运行这个例子报这个错误,怎么解决,请赐教!
java.lang.VerifyError: class org.wltea.analyzer.lucene.IKAnalyzer overrides final method tokenStream.(Ljava/lang/String;Ljava/io/Reader;)Lorg/apache/lucene/analysis/TokenStream;
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Except

相关推荐

    lucene4.0+ik

    Lucene4.0对索引结构进行了改进,采用了更紧凑的格式,减少了磁盘空间的占用,提高了查询速度。此外,它还支持多线程索引和查询,提升了并行处理能力。对于开发者而言,Lucene4.0提供了更丰富的API,使得构建全文...

    lucene4.0实例

    《Lucene4.0实例详解》 Lucene是一款强大的全文搜索引擎库,被广泛应用于各种信息检索系统中。这里我们主要探讨的是Lucene 4.0版本的实例应用,旨在通过实际操作来理解其核心概念和功能。 一、Lucene基础 Lucene ...

    lucene4.0 demo

    本教程通过一个简单的demo,将深入讲解如何利用Lucene 4.0创建索引、删除索引以及进行有效搜索。以下是详细的知识点解析: 1. **Lucene简介** Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发。它提供...

    lucene4.0简单的新增和查询

    总之,Lucene 4.0 提供了强大的文本索引和搜索功能,让开发者能够轻松地在应用程序中集成高级搜索功能。这个简单的示例是理解其工作原理和实践操作的一个良好起点。通过深入研究并结合自己的需求,开发者可以构建出...

    IK Analyzer 2012FF_hf1_IK分词lucene4.0_源码

    "IK Analyzer 2012FF_hf1_IK分词lucene4.0_源码" 提供的是IK分词器的一个特定版本,适用于Lucene 4.0,这在当时是一个相对老但仍然被一些项目依赖的版本。 分词是中文信息处理的关键步骤,它将连续的汉字序列分割成...

    IK Analyzer 2012FF_hf1+lucene4.0的jar包

    总的来说,IK Analyzer 2012FF_hf1+lucene4.0的组合提供了一套强大的中文全文检索解决方案,适用于需要处理大量中文文本的系统,例如企业级的信息检索平台、内容管理系统或者在线问答系统。使用这套组合,开发者可以...

    IK Analyzer分析器jar包和使用文档,支持lucene4.0

    IK Analyzer不仅支持基本的分词功能,还能够与流行的全文检索框架Apache Lucene紧密集成,尤其在提供的版本中,它已经兼容Lucene 4.0。 IK Analyzer的核心思想是通过词典分词和文法分词相结合的方式,以达到更好的...

    lucene .NET4.0&盘古分词dll,demo,doc

    首先,Lucene.NET 4.0是Apache Lucene项目的一个.NET版本,它实现了完整的Lucene搜索功能,包括索引、查询、排序和高亮显示等。Lucene.NET 4.0主要更新了对.NET Framework 4.0的支持,增强了性能,并引入了一些新的...

    盘古分词器+lucene .net4.0下编译

    将盘古分词器与Lucene.NET 4.0结合使用,可以提升中文文本搜索的性能和准确性。首先,我们需要将盘古分词器的重新编译版本(如PanGu.dll)引入项目中,作为Lucene.NET的自定义Analyzer。这通常涉及到创建一个继承自`...

    Lucene 索引图形化界面工具 LukeAll 3.5~4.0

    **Lucene 索引图形化界面工具 LukeAll 3.5~4.0** Lucene 是一个开源的全文搜索引擎库,它提供了强大的文本搜索功能,但其本身的接口设计是命令行或者编程式的,对于非开发人员或者在调试索引时可能会显得不太友好。...

    lucense demo

    2. 创建索引:这是Lucene的第一步,需要将待搜索的文本数据转换为索引。你可以创建一个`IndexWriter`对象,设置相应的目录(如内存或磁盘),然后使用`Document`对象表示每个文档,添加字段并分词。 3. 使用IK分词...

    Lucene.net概念介绍

    - Lucene 的核心功能是对文本数据进行索引和搜索。它可以接收任意数量的字符串,然后建立索引,当用户输入关键词时,返回包含关键词的文本位置。这种能力使得 Lucene 可以应用于各种场景,如站内新闻搜索、数据库...

    Lucene4.X实战类baidu搜索的大型文档海量搜索系统-04.Lucene索引深入 共24页.pptx

    在Lucene 4.0中,Segment Info格式有所变化,可能会与其他版本不兼容。 4. **字段信息(Fields)**:.fnm文件包含了所有字段的名称。每个文档的Field Data的地址和实际数据分别存储在.fdx和.fdt文件中,这允许快速...

    用lucene对数据库建立索引及搜索

    **使用Lucene对数据库建立索引及搜索** Lucene是一个高性能、可伸缩的信息检索库,它是Apache软件基金会的顶级项目之一。它提供了一个简单但功能强大的API,用于在各种数据源上创建全文搜索引擎,包括数据库。在本...

    luke 4.0 jar 4.7.1jar

    《Luke:Lucene索引查看工具的深度解析》 在信息检索领域,Lucene作为一款强大的全文搜索引擎库,被广泛应用于各种数据检索系统。而Luke,全称Lucene Index Toolbox,是Lucene的一个辅助工具,它允许开发者和管理员...

    lucene-4.10.3源码

    在`src/core/org/apache/lucene/index`目录下,我们可以找到关于索引构建、读取和更新的相关类,如`IndexWriter`用于创建和更新索引,`DirectoryReader`用于读取索引。 2. 查询解析器:查询字符串转换为可执行的...

    盘古分词、lucene3.0.3搜索的使用示例v1.3.zip

    《盘古分词与Lucene 3.0.3在.NET 4.0中的应用实践》 盘古分词和Lucene是两个在文本处理和信息检索领域中至关重要的工具。盘古分词,作为一款优秀的中文分词系统,能够高效准确地对中文文本进行分词,为后续的数据...

    luceneDemo(完整代码)

    在"luceneDemo4.0"中,你将会看到以上概念的具体应用,包括创建索引、执行查询、高亮展示结果以及调整排序逻辑的示例代码。通过实践这个项目,你不仅可以了解Lucene的基本操作,还能学习到如何在实际项目中优化搜索...

    盘古分词、lucene3.0.3搜索的使用示例.zip

    3. **文档索引**:使用Lucene的IndexWriter对象,将包含分词后的文本的Document对象写入索引库。每个Document对象代表一个待检索的文档,可以包含多个Field,如标题、内容等。 4. **查询执行**:构建Query对象,...

Global site tag (gtag.js) - Google Analytics