`
laotu5i0
  • 浏览: 143847 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

lucene索引word/pdf/html/txt文件及检索(搜索引擎)

    博客分类:
  • java
阅读更多
因为lucene索引的时候是将String型的信息建立索引的,所以这里必须是将word/pdf/html等文件的内容转化问字符型。
lucene的jar包自己去下载。
首先是建立索引的代码:

public class TextFileIndexer {  
    public static void main(String[] args) throws Exception {  
        /* 指明要索引文件夹的位置,这里是d盘的s文件夹下 */ 
        File fileDir = new File("d:\\s");  
 
        /* 这里放索引文件的位置 */ 
        File indexDir = new File("d:\\index");  
        Analyzer luceneAnalyzer = new StandardAnalyzer();  
        IndexWriter indexWriter = new IndexWriter(indexDir, luceneAnalyzer,  
                true);  
        File[] textFiles = fileDir.listFiles();  
        long startTime = new Date().getTime();  
          
        //增加document到索引去    
                System.out.println("File正在被索引."); 
               
                /*
                 * 注意要变的就是这里,路径和读取文件的方法
                 * */
                String path ="d:\\s\\2.doc";
                String temp = ReadFile.readWord(path);
//                String path ="d:\\s\\index.htm";
//                String temp = ReadFile.readHtml(path);
                Document document = new Document();  
                Field FieldPath = new Field("path",path,
                        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());  
    } 
}
上面已经注释了要换的地方,我们要做的就是换文件的路径和读取文件的方法。

下面来具体看下读取文件的方法

1.首先来看WORD文档:
我这里用的是poi,相关jar包自己去下载,然后加到工程中(以下所要用的jar包也是,不再重复说)。

来看相关代码:
    public static String readWord(String path) {
        StringBuffer content = new StringBuffer("");// 文档内容
        try {

            HWPFDocument doc = new HWPFDocument(new FileInputStream(path));
            Range range = doc.getRange();
            int paragraphCount = range.numParagraphs();// 段落
            for (int i = 0; i < paragraphCount; i++) {// 遍历段落读取数据
                Paragraph pp = range.getParagraph(i);
                content.append(pp.text());
            }

        } catch (Exception e) {

        }
        return content.toString().trim();
    }
2.PDF文件用的是PDFbox:

public static String readPdf(String path) throws Exception {
        StringBuffer content = new StringBuffer("");// 文档内容
        FileInputStream fis = new FileInputStream(path);
        PDFParser p = new PDFParser(fis);
        p.parse();
        PDFTextStripper ts = new PDFTextStripper();
        content.append(ts.getText(p.getPDDocument()));
        fis.close();
        return content.toString().trim();
    }
3.html文件:

public static String readHtml(String urlString) {

        StringBuffer content = new StringBuffer("");
        File file = new File(urlString);
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(file);
            // 读取页面
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    fis,"utf-8"));//这里的字符编码要注意,要对上html头文件的一致,否则会出乱码
           
            String line = null;

            while ((line = reader.readLine()) != null) {
                content.append(line + "\n");
            }
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        String contentString = content.toString();
        return contentString;
    }
4.txt文件:

public static String readTxt(String path) {
        StringBuffer content = new StringBuffer("");// 文档内容
        try {
            FileReader reader = new FileReader(path);
            BufferedReader br = new BufferedReader(reader);
            String s1 = null;

            while ((s1 = br.readLine()) != null) {
                content.append(s1 + "\r");
            }
            br.close();
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return content.toString().trim();
    }
接下来数搜索代码:

public class TestQuery {  
    public static void main(String[] args) throws IOException, ParseException {  
        Hits hits = null;  
        //搜索内容自己换
        String queryString = "根据国务院的决定";  
        Query query = null; 
       
        IndexSearcher searcher = new IndexSearcher("d:\\index"); //这里注意索引存放的路径
 
        Analyzer analyzer = new StandardAnalyzer();  
        try {  
            QueryParser qp = new QueryParser("body", analyzer);  
            /**
             * 建索引的时候我们指定了body建立为内容,我们搜索的时候也是针对body的,所以
             *   QueryParser qp = new QueryParser("body", analyzer);
             *   这句和建立索引时候
                Field FieldBody = new Field("body", temp, Field.Store.YES,  
                        Field.Index.TOKENIZED,  
                        Field.TermVector.WITH_POSITIONS_OFFSETS);
             *的这句的"body"是对应的。
             */
            query = qp.parse(queryString);  
        } catch (ParseException e) {
            System.out.println("异常");
        }  
        if (searcher != null) {  
            hits = searcher.search(query);  
            if (hits.length() > 0) {  
                System.out.println("找到:" + hits.length() + " 个结果!"); 
                for (int i = 0; i < hits.length(); i++) {//输出搜索信息
                     Document document = hits.doc(i);
                     System.out.println("contents:"+document.get("body"));
                     //同样原理这里的document.get("body")就是取得建立在索引文件里面的额body的所有内容
                     //你若想输出文件路径就用document.get("path")就可以了
                }
            } else{
                System.out.println("0个结果!");
            }  
        } 
    }
分享到:
评论

相关推荐

    使用Lucene对doc、docx、pdf、txt文档进行全文检索功能的实现 - 干勾鱼的CSDN博客 - CSDN博客1

    Apache Lucene 是一个开源的全文检索库,它提供了一种高效、可扩展的方式来构建全文搜索引擎。在Java开发中,Lucene被广泛用于实现文件的全文检索功能,包括对doc、docx、pdf、txt等常见格式文档的文本内容检索。在...

    lucene 3.6 检索文件 pdf word ppt excel txt html xml

    在版本3.6中,它提供了强大的文件检索功能,支持对多种文件类型的搜索,包括PDF、Word、PPT、Excel、TXT、HTML和XML等。这个版本的Lucene已经过封装,使得开发者能够更方便地集成到自己的项目中,实现快速的全文检索...

    lucene word ppt excel pdf全文检索

    总结,利用Apache Lucene实现对Word、PPT、Excel、PDF和TXT等文件的全文检索,需要经过文件解析、内容提取、分词、索引构建、查询解析、搜索匹配、结果排序和展示等多个环节。这一过程涉及到了文件处理、文本分析和...

    Lucene---全文检索(文档pdf/txt/office/html)

    Lucene 广泛应用于内容管理系统、企业级搜索引擎、网站的站内搜索、数据分析平台等场景,为用户提供高效、准确的全文检索体验。 ### 6. 结合源码和工具学习 了解了 Lucene 的基础知识后,可以通过阅读源码来深入...

    lucene读取word excel pdf正则表达式查询

    每个单元格的内容会被视为独立的文本片段,合并后形成一个文档供Lucene索引。需要注意的是,Excel可能包含公式和非可视内容,处理时应考虑其对搜索结果的影响。 3. **PDF文档处理**:PDF文件的处理较为复杂,因为...

    luncene索引PDF、Html、word.txt

    ### Lucene索引PDF、HTML、Word与TXT文档 #### 概述 Lucene是一款高性能、全功能的文本搜索引擎库,被广泛应用于多种场景下的全文检索应用开发中。本篇文章将详细介绍如何使用Lucene对PDF、HTML、Word及纯文本(TXT...

    搜索引擎Lucene简单入门.pdf

    这种技术广泛应用于各种场景,包括但不限于操作系统中的文件搜索、集成开发环境(IDE)中的帮助文档搜索、社交媒体及博客系统的文章搜索以及通用搜索引擎。 1. **Windows 文件搜索**:用户可以通过此功能在计算机...

    nutch+lucene开发自己的搜索引擎ch3.pdf

    - **标题与描述**: 本资料“nutch+lucene开发自己的搜索引擎ch3.pdf”聚焦于介绍如何使用Nutch和Lucene来构建自己的搜索引擎,特别强调了第三章:开源搜索引擎入门。 - **标签与内容**: 标签为“Nutch”,表明主要...

    lucene索引入门[归类].pdf

    lucene索引入门 Lucene 是一个基于 Java 的全文搜索引擎库,提供了一个简单、灵活、可扩展的搜索解决方案。Lucene 的核心组件包括索引模块、检索模块、语言分析器、查询分析器、存储结构等。 1. 索引模块(Index)...

    Lucene 3.0.1 全文检索引擎的架构 对文件,数据库建索引,及查询(高亮显示)

    Lucene是一款开源的全文检索库,由Apache软件基金会开发,广泛应用于各种搜索引擎的构建。在3.0.1版本中,Lucene提供了一套高效、可扩展的文本搜索解决方案。其核心特性包括文档的索引、查询解析、评分机制以及结果...

    开发自己的搜索引擎Lucene2.0+Heritrix

    ### 开发自己的搜索引擎:Lucene 2.0 + Heritrix #### 一、概述 在构建搜索引擎的过程中,Lucene 和 Heritrix 是两个至关重要的工具。本文将深入探讨这两个工具的功能及其如何协同工作,帮助读者理解如何使用它们...

    搜索引擎lucene学习资料

    "搜索引擎学习资料"和"搜索引擎原理.pdf"这两个文件则可能提供了更广泛的信息检索和搜索引擎理论知识。PDF文件通常包含高质量的图像和排版,适合保存和分享学术资料。在这个PDF文档中,读者可以深入学习搜索引擎的...

    Heritrix lucene开发自己的搜索引擎(源码)1

    注:随光盘附带的mirror.rar文件是使用Heritrix从pconline网上抓取的手机信息页面(以网站镜象格式存储),在本书最后搜索引擎完整实例中需要使用到。由于光盘容量有限,笔者删除了原始镜像目录中一部分的网页,可能...

    Lucene应用中Pdf文档文本数据提取方法研究

    通过xpdf,可以从Pdf文件中准确地抽取文本内容,使其能够被Lucene索引和检索。具体步骤如下: 1. **下载并安装xpdf**: 首先,从官方网站http://www.foolabs.com/xpdf/ 下载xpdf工具包,并按照指南完成安装。 2. **...

    Lucene的原理完整版pdf

    Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护,是Java编程语言中广泛使用的搜索引擎库。它提供了一个简单但功能强大的API,用于索引和搜索文本数据,使得开发者可以轻松地在应用程序中实现复杂的...

    c#检索excel word ppt pdf

    例如,使用Lucene.NET这样的全文搜索引擎库,可以建立高效的倒排索引,快速定位含有特定词汇的文档。 七、并发与多线程 对于大量文件的检索,使用多线程或异步处理能显著提升性能。C#的`Task`类和`async/await`...

    lucene 全文检索

    在实践中,Lucene可以处理多种格式的文件,如Word、Excel、PPT和PDF,这些文件通过特定的解析器(如Apache POI和PDFBox)将内容提取出来,然后进行索引。通过封装接口,开发者可以轻松地将这些功能整合到自己的应用...

    开发自己的搜索引擎lucene and heritrix

    注:随光盘附带的mirror.rar文件是使用Heritrix从pconline网上抓取的手机信息页面(以网站镜象格式存储),在本书最后搜索引擎完整实例中需要使用到。由于光盘容量有限,笔者删除了原始镜像目录中一部分的网页,可能...

    基于Heritrix与Lucene的垂直搜索引擎研究.pdf

    Lucene是一个高性能的全文检索库,被广泛应用于构建搜索引擎的索引机制。它支持复杂查询,并且能够处理大规模数据集,非常适合用于垂直搜索引擎的索引构建。 #### 三、Heritrix与Lucene的应用 Heritrix与Lucene的...

    Lucene实战之搜索引擎示例

    本文将深入探讨如何利用Apache Lucene构建一个强大的搜索引擎,覆盖HTML、TXT、PDF和Word等多种格式的文档。Apache Lucene是Java语言开发的一个全文检索库,它提供了强大的搜索功能,同时也具有高度可扩展性和灵活性...

Global site tag (gtag.js) - Google Analytics