`

第一个搜索引擎: 为一个文本文件添加索引 以便检索

阅读更多

目录如下:

d:\\index 存放索引文件

D:\testfolder 存放大文件分割好的小文件(很多)

d:/book.txt 存放原始文件

 


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( "d:\\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()  +   "  个结果! " );  
              //  System.out.println(searcher.getIndexReader().document(  ));
            }   
             for(int i=0; i<hits.length(); i++){
              System.out.println(hits.id(i));
             }
        }
        
 
    } 
 
}  

 

 

 
 
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 jeasy.analysis.MMAnalyzer;

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( "d:\\testfolder" );  
 
         /**/ /*  这里放索引文件的位置  */  
        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到索引去   
          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;  
    }   
}  

分享到:
评论

相关推荐

    这就是搜索引擎:核心技术详解

    1. 搜索引擎概述:搜索引擎是互联网信息检索的核心工具,通过爬虫技术遍历网络,抓取网页内容,然后对这些内容进行索引和存储,以便用户通过关键词查询获取相关信息。搜索引擎主要包括爬虫、索引、查询处理和排名四...

    Nutch使用总结 信息检索 建立索引 搜索引擎

    Nutch 是一个开源的网络爬虫项目,主要用来抓取互联网上的网页并建立索引,为信息检索提供基础。对于初学者来说,它是一个很好的平台,可以深入了解搜索引擎的工作原理并动手实践。 ### 1. 系统架构 Nutch 的系统...

    搜索引擎与信息检索教程-ppt加示例源代码

    1. **网络爬虫**:网络爬虫是搜索引擎获取网页的第一步,它按照一定的策略自动抓取互联网上的信息。在C++或C中实现爬虫,需要熟悉HTTP协议,掌握多线程和异步IO技术,以及高效的数据存储。 2. **HTML解析**:解析...

    Lucene全文检索引擎

    Lucene是Apache软件基金会的一个开源项目,它是一个高性能、全文本搜索引擎库,可以被集成到各种应用中实现全文检索功能。Lucene提供了完整的搜索功能实现,包括索引创建、文档存储、查询解析和结果排序等。它的设计...

    深入搜索引擎--海量信息的压缩、索引和查询

    《深入搜索引擎:海量信息的压缩、索引和查询》是斯坦福大学信息检索和挖掘课程的首选教材之一,并已成为全球主要大学信息检索的主要教材。《深入搜索引擎:海量信息的压缩、索引和查询》理论和实践并重,深入浅出地给...

    swjtu西南交大互联网搜索引擎 项目一 报告:搜索引擎文本预处理

    本项目通过对大量英文和中文网页文档的下载与预处理,构建了一个基础的搜索引擎文本预处理流程。该流程涵盖了文档下载、HTML解析、文本提取、字符化、分词、停用词删除等多个关键步骤。通过这一系列步骤,使得原始...

    搜索引擎文本预处理

    搜索引擎文本预处理是构建高效搜索系统的关键步骤,它涉及到数据获取、信息提取、文本分析等多个环节。本项目基于对搜索引擎的基本原理、架构设计和技术的深入理解,利用Scrapy框架进行网页抓取,结合Lucene的分词...

    SQL Server全文检索对文本内容进行检索的三个方案

    2. **配置索引服务器**:在“计算机管理”界面下的索引服务中,新建一个编录,输入编录名并关联至数据库,随后添加需索引的目录路径。此操作使索引服务能够监控指定目录下的文件变动,自动更新索引。 3. **SQL ...

    [搜索链接]无极搜索引擎 v1.0_gss.zip

    1. **爬虫技术**:搜索引擎的第一步是收集互联网上的信息,这通常通过网络爬虫完成。无极搜索引擎可能会有一个智能爬虫系统,能够自动发现、下载并存储网页,以便后续处理。 2. **页面抓取与预处理**:抓取到的网页...

    搜索引擎信息检索实践

    索引构建是将处理后的文本转换为倒排索引,其中每个词对应一个倒排表,记录包含该词的文档及其位置信息。 五、查询处理与排序 当用户输入查询时,搜索引擎会解析查询语句,生成查询词的集合,然后在索引中查找这些...

    文件(夹)搜索引擎(C#版)

    在IT行业中,文件(夹)搜索引擎是一个至关重要的工具,它能帮助用户快速定位和查找存储在计算机中的特定文件或文件夹。在这个项目中,我们关注的是一个基于C#编程语言实现的文件搜索引擎。C#是一种现代化、面向对象的...

    搜索引擎全文检索技术 oracle

    全文检索技术能够理解自然语言,并从中提取出关键信息,为用户提供类似搜索引擎的体验。以下是对Oracle全文检索技术的详细介绍: 1. **Oracle Text(Oracle全文本)概述** Oracle Text是Oracle数据库的一个组件,...

    ( 搜索引擎-原理、技术与系统.pdf )

    搜索引擎是互联网的重要组成部分,它通过爬取、索引和排名网页,为用户提供快速、准确的信息检索服务。搜索引擎的核心功能包括网页抓取、预处理、索引、查询处理和结果排序等。 二、网页抓取 网页抓取是搜索引擎的...

    高清彩版 自己动手写搜索引擎

    - **2.2.3 Lucene全文检索引擎**:Lucene是一个高性能、全功能的文本搜索引擎库,本节详细介绍其特性和用法。 - **2.2.4 Nutch网络搜索软件**:Nutch是一款开源的网络爬虫项目,用于抓取网页并构建索引,本节介绍...

    基于lucene的简单桌面搜索引擎

    在这个“基于Lucene的简单桌面搜索引擎”项目中,我们将探讨如何利用Lucene的核心功能在用户的桌面上实现一个基本的文件搜索工具。 1. **Lucene的基本概念** - **索引**:Lucene通过建立索引来提高搜索效率。索引...

    spark实现财经新闻搜索引擎(正文提取、中文分词、倒排索引构建、执行搜索)

    本项目旨在利用大数据处理框架Spark来构建一个财经新闻搜索引擎,涉及的主要技术包括新闻正文提取、中文分词、倒排索引构建、执行搜索以及用户界面设计。下面是各项任务的详细解析: 1. **新闻正文提取**:此步骤...

    lucene搜索引擎demo

    总结来说,“lucene搜索引擎demo”提供了一个完整的示例,涵盖了从数据抓取、分词处理到建立和使用Lucene索引的全过程。通过对这个demo的学习,开发者可以快速理解并掌握Lucene搜索引擎的使用,进一步应用于实际项目...

Global site tag (gtag.js) - Google Analytics