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

lucene笔记(搜索的小例子)

    博客分类:
  • java
阅读更多

今天上午本来再看火箭VS马刺的比赛,但是火箭打得太烂了,第一节看完我就关了,没事可做我就开始看我买的新书Ajax+lucene,看了看lucene部分的前几章,发现我下载的lucene2.0和书中用到的lucene1.4差别挺大的,在这里把我在网上查到的修改的方法写出来,以后查找就方便多了。

首先在你的c盘建立一个test文件加,里面放入四个.txt文件 其中a.txt输入“中华人民共和国” b.txt输入“人民共和国” c.txt输入“人民” d.txt输入“共和国”。c盘下在建立一个index文件,只是作为索引存放目录的。

然后在eclipse中新建一个java项目,输入项目名称LuceneHelloWord,然后点击下一步,找到“库”然后“添加外部jar ”,把你的lucene包添加进去就可以了,我的是lucene-core-2.0.0.jar。

在项目中建三个类,Constants.java是用来存储一些常量的类,如索引文件的路径和索引文件的存放位置

代码

package testlucene;

public class Constants ...{
    
// 要索引的文件的存放路径
    public final static String INDEX_FILE_PATH = "c:\test";

    
// 索引的存放位置
    public final static String INDEX_STORE_PATH = "c:\index";

}

 

LuceneIndex.java是用来对文件建立索引的类。代码

package testlucene;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Date;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;

public class LuceneIndex ...{

    
public static void main(String[] args) throws Exception ...{
        
// 声明一个对象
        LuceneIndex indexer = new LuceneIndex();
        
// 建立索引
        Date start = new Date();
        indexer.writeToIndex();
        Date end 
= new Date();
        System.out
                .println(
"建立索引时用:" + (end.getTime() - start.getTime()) + "毫秒");
        
// 关闭索引器
        indexer.close();
    }


    
public LuceneIndex() ...{
        
try ...{
            writer 
= new IndexWriter(Constants.INDEX_STORE_PATH,
                    
new StandardAnalyzer(), true);
        }
 catch (Exception e) ...{
            e.printStackTrace();
        }

    }


    
// 索引器
    private IndexWriter writer = null;

    
// 将要建立索引的文件构造成一个Document对象,并添加一个域"Content"
    private Document getDocument(File f) throws Exception ...{
        
// 生成文档对象
        Document doc = new Document();
        
// 获取文件流
        FileInputStream is = new FileInputStream(f);
        Reader reader 
= new BufferedReader(new InputStreamReader(is));
        
// 添加索引内容
        doc.add(new Field("contents", reader));
        doc.add(
new Field("path", f.getCanonicalPath(), Field.Store.YES,
                Field.Index.NO));
        
return doc;
    }


    
public void writeToIndex() throws Exception ...{
        File folder 
= new File(Constants.INDEX_FILE_PATH);
        
if (folder.isDirectory()) ...{
            String[] files 
= folder.list();
            
for (int i = 0; i < files.length; i++...{
                File file 
= new File(folder, files[i]);
                Document doc 
= getDocument(file);
                System.out.println(
"正在建立索引" + file + "");
                writer.addDocument(doc);
            }

        }

    }


    
public void close() throws Exception ...{
        writer.close();
    }


}

 

 

luceenSearch.java适用于检索索引的类。代码:

package testlucene;

import java.util.Date;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
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 LuceneSearch ...{
 
public static void main(String args[])throws Exception...{
     LuceneSearch test 
= new LuceneSearch();
     
//检索“人民”这个关键词
     Hits h = null;
     h 
= test.search("华人");
     test.printResult(h);
     h 
= test.search("共和");
     test.printResult(h);
     h 
= test.search("");
     test.printResult(h);     
 }

 
public LuceneSearch()...{
     
try...{
         searcher 
= new IndexSearcher(IndexReader.open(Constants.INDEX_STORE_PATH));
     }
catch(Exception e)...{
         e.printStackTrace();
     }

 }

 
//声明一个IndexSearcher对象
 private IndexSearcher searcher = null;
 
//声明一个Query对象
 private Query query = null;
 
 
public final Hits search(String keyword)...{
     System.out.println(
"正在检索关键字:"+keyword);
     
try...{
         
//将关键字包装成Query对象
         query = new QueryParser("contents",new StandardAnalyzer()).parse(keyword);
         
         Date start 
= new Date();
         Hits hits 
= searcher.search(query);
         Date end 
= new Date();
         System.out.println(
"检索完成,用时:"+(end.getTime()-start.getTime())+"毫秒");
         
return hits;
     }
catch (Exception e)...{
         e.printStackTrace();
         
return null;
     }

 }

 
public void printResult(Hits h)...{
     
if(h.length()==0)...{
         System.out.println(
"对不起,没有找到您要的结果。");
     }

     
else
     
...{
         
for(int i=0;i<h.length();i++)...{
分享到:
评论

相关推荐

    基于lucene和nutch的开源搜索引擎资料集合

    一个例子学懂搜索引擎(lucene).doc 中文搜索引擎技术揭密.doc 九大开源搜索引擎介绍.txt 基于Nutch的搜索引擎技术.pdf 基于开源工具搭建小型搜索引擎.pdf 整合开源工具的小型搜索引擎构建.pdf 用_Hadoop_进行分布式...

    【大搜集:lucene学习资料】---<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

    lucene为数据库搜索建立增量索引.txt lucene数据库索引.txt 新闻系统全文检索的思绪.txt lucene学习笔记 1 .txt lucene学习笔记 2.txt lucene学习笔记 3 .txt lucene入门实战.txt Lucene 的学习 .txt ...

    es学习笔记,覆盖全面,从入门到精通,原理画图分析

    Elasticsearch是一个基于Lucene构建的开源全文搜索引擎。它能够存储、搜索和分析大量数据。由于ES基于NoSQL的文档存储方式,其数据结构主要基于JSON文档,具有高度的灵活性。ES通过索引来组织数据,每个索引类似于...

    Elastic Search学习笔记

    Elasticsearch 是一个基于 Lucene 的搜索引擎,它提供了丰富的功能用于搜索、分析和存储数据。本篇学习笔记将围绕 Elasticsearch 的基本查询操作展开,包括前置过滤、查询与排序以及统计功能。 #### 二、查询基础 ...

    rails _sunspot 学习笔记

    它基于 Solr 和 Lucene 构建,可以方便地集成到 Rails 应用中,为用户提供高效的搜索功能。 #### 二、Sunspot 安装 在开始之前,请确保已经安装了以下组件: 1. **Ruby on Rails 3**:本文档主要针对 Rails 3 ...

Global site tag (gtag.js) - Google Analytics