`

lucene学习笔记

    博客分类:
  • java
阅读更多
Lucene 其实很简单的,它最主要就是做两件事:建立索引和进行搜索。利用Lucene搜索前先要建立词库,也是所说的“建立索引”。这样Lucene才会“认识”这些词。
Lucene 建立索引需要用到如下几个类:

IndexWriter:lucene中最重要的的类之一,它主要是用来将文档加入索引,同时控制索引过程中的一些参数使用。

Analyzer:分析器,主要用于分析搜索引擎遇到的各种文本。常用的有StandardAnalyzer分析器,StopAnalyzer分析器,WhitespaceAnalyzer分析器等。

Directory:索引存放的位置;lucene提供了两种索引存放的位置,一种是磁盘,一种是内存。一般情况将索引放在磁盘上;相应地lucene提供了FSDirectory和RAMDirectory两个类。

Document:文档;Document相当于一个要进行索引的单元,任何可以想要被索引的文件都必须转化为Document对象才能进行索引。


Field:字段。

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;

public class TextFileIndexer {

	/**利用现有文件中的文章创建词库(建立索引)
	 * @param args
	 */
	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 fileData = readFile(textFiles[i].getCanonicalPath(),"UTF-8");
               System.out.println(fileData);  
               Document document = new Document();  
               Field fieldPath = new Field("path", textFiles[i].getPath(),Field.Store.YES, Field.Index.NO);
               Field fieldBody = new Field("body", fileData, 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)+ " 毫秒来把文档增加到索引里面去!"+ indexDir.getPath());
	}
	
	public static String readFile(String FileName, String charset) throws IOException {
	           
        BufferedReader br = new BufferedReader(new InputStreamReader(  
                new FileInputStream(FileName), charset));  
        String line = null;  
        StringBuffer temp = new StringBuffer();  
          
        while ((line = br.readLine()) != null) {  
            temp.append(line);
        }  
        br.close();  
        return temp.toString();  
    }  

}


有了词库我们就可以开始搜索了,搜索要用到下面几个类:

IndexSearcher:是lucene中最基本的检索工具,所有的检索都会用到IndexSearcher工具;

Query:查询,lucene中支持模糊查询,语义查询,短语查询,组合查询等等,如有TermQuery,BooleanQuery,RangeQuery,WildcardQuery等一些类。

QueryParser: 是一个解析用户输入的工具,可以通过扫描用户输入的字符串,生成Query对象。

Hits:在搜索完成之后,需要把搜索结果返回并显示给用户,只有这样才算是完成搜索的目的。在lucene中,搜索的结果的集合是用Hits类的实例来表示的。
Hits对象是搜索结果的集合 主要有下面几个方法:
1.length() ,   记录有多少条结果返回
2.doc(n)       返回第n个记录
3.id(in)         返回第n个记录的Document ID
4.score(n)       第n个记录的相关度(积分)


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 {

	/**进行搜索 
	 * @param args
	 */
	public static void main(String[] args) throws IOException, ParseException{
		// TODO Auto-generated method stub

		Hits hits = null;  
        String keywords = "中华";  
        Query query = null;  
        IndexSearcher searcher = new IndexSearcher("c:\\index");  
  
        Analyzer analyzer = new StandardAnalyzer();  
        try {  
            QueryParser qp = new QueryParser("body", analyzer);  
            query = qp.parse(keywords);  
        } catch (ParseException e) {  
        }  
        if (searcher != null) {
            hits = searcher.search(query);
            if (hits.length() > 0) {  
                System.out.println("找到:" + hits.length() + " 个结果!");  
            }  
        }  
	}

}

分享到:
评论

相关推荐

    Lucene 学习笔记 1

    **Lucene 学习笔记 1** Lucene 是一个全文搜索引擎库,由 Apache 软件基金会开发。它提供了一个可扩展的、高性能的搜索框架,使得开发者能够在其应用程序中集成高级的搜索功能。本篇学习笔记将深入探讨 Lucene 的...

    Lucene学习笔记.doc

    【Lucene学习笔记】 Lucene是一个高性能、全文检索的开源库,完全用Java编写,能够帮助开发者在应用程序中实现复杂的搜索引擎功能。它提供了强大的索引和搜索机制,使得从大量文本数据中快速找到相关信息变得简单。...

    Lucene学习笔记

    【Lucene学习笔记】 Lucene 是一款开源的全文检索框架,由Apache软件基金会维护,它提供了高效的、可扩展的搜索引擎功能。不同于一个完整的应用程序,Lucene 提供的是一个基础组件,开发者可以将其集成到自己的应用...

    Lucene学习笔记(一)Lucene入门实例

    NULL 博文链接:https://kylinsoong.iteye.com/blog/719415

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

    lucene学习笔记 1 .txt lucene学习笔记 2.txt lucene学习笔记 3 .txt lucene入门实战.txt Lucene 的学习 .txt Lucene-2.0学习文档 .txt Lucene入门与使用 .txt lucene性能.txt 大富翁全文索引和查询的例子...

    lucene学习资料

    10. **lucene学习笔记 3 .txt** 这是作者的学习笔记,可能包含了个人理解和使用Lucene过程中遇到的问题及解决方案,提供了不同角度的见解和实践经验。 通过这些文档,你可以系统地学习和掌握Lucene的各个方面,从...

    Lucene 3.6 学习笔记

    【Lucene 3.6 学习笔记】 Lucene 是一个高性能、全文本搜索库,广泛应用于各种搜索引擎的开发。本文将深入探讨Lucene 3.6版本中的关键概念、功能以及实现方法。 ### 第一章 Lucene 基础 #### 1.1 索引部分的核心...

    Lucene开发指南

    Lucene学习笔记(二)可能涉及索引构建过程,讲解了如何使用Document对象存储文档内容,Field对象定义字段属性,以及如何使用IndexWriter进行索引更新和优化。 笔记(三)和(四)可能深入到查询解析和执行。查询解析器...

    lucene3.5学习笔记

    ### Lucene 3.5 学习笔记 #### 一、Lucene 3.5 基本概念 ##### 1.1 Lucene 概述 **1.1.1 IndexWriter** `IndexWriter` 是 Lucene 中的核心类之一,用于创建或更新索引。它提供了添加文档、删除文档、优化索引等...

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

    Lucene学习笔记.doc nutch_tutorial.pdf nutch二次开发总结.txt nutch入门.pdf nutch入门学习.pdf Nutch全文搜索学习笔记.doc Yahoo的Hadoop教程.doc [硕士论文]_基于Lucene的Web搜索引擎实现.pdf [硕士论文]_基于...

    lunece 学习笔记实用知识库分享知识分享

    Lucene 学习笔记是指如何学习和使用 Lucene。我们可以通过学习 Lucene 的使用和实现来掌握 Lucene。 Solr 学习笔记 Solr 学习笔记是指如何学习和使用 Solr。我们可以通过学习 Solr 的使用和实现来掌握 Solr。 ...

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

    1&gt; lucene学习笔记 2&gt; 全文检索的实现机制 【1】lucene学习笔记的目录如下 1. 概述 3 2. lucene 的包结构 3 3. 索引文件格式 3 4. lucene中主要的类 4 4.1. Document文档类 4 4.1.1. 常用方法 4 4.1.2. 示例 4 4.2...

Global site tag (gtag.js) - Google Analytics