`
chenlb
  • 浏览: 696040 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Lucene简单使用

阅读更多
     最近看下Lucene的东西,把它写下来可以看下。Lucene结构和工作原理我就不说了,网上好多。

我的环境是Lucene2.0
写一个简单使用Lucene的示例。此类首创建索引,然后显示索引文档的情况,最后搜索(只在content找,和在title或content里找)。

package net.blogjava.chenlb.lucene;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;

/**
 * Lucene简单使用
 * 
@author chenlb 2008-3-8 下午11:42:55
 
*/
public class LuceneUse {

    
public static void main(String[] args) throws Exception {
        LuceneUse liu 
= new LuceneUse();
        
//索引
        IndexWriter iw = new IndexWriter("index"new StandardAnalyzer(), true);
        
//添加要索引的Lucene文档
        Document doc = liu.createDoc("Lucene创建索引示例""chenlb""2008-03-08""Lucene索引的内容在这里,这些内容不被存储.");
        iw.addDocument(doc);
        
        doc 
= liu.createDoc("文档2""bin""2007-10-03""这是索引的另一个文档");
        iw.addDocument(doc);
        
        doc 
= liu.createDoc("学习内容""chenlb""2008-3-3""要努力奋斗,祝网友们天天快乐");
        iw.addDocument(doc);
        
        iw.optimize();    
//优化
        iw.close();
        
        
//
        System.out.println("===========索引文档内容=============");
        IndexReader reader 
= IndexReader.open("index");
        
for(int i=0; i<reader.numDocs(); i++) {
            Document d 
= reader.document(i);
            liu.printDoc(d);
        }
        
        System.out.println(
"===========以下是单域查找'天天'结果============");
        
//单域搜索
        IndexSearcher searcher = new IndexSearcher("index");
        QueryParser parser 
= new QueryParser("content"new StandardAnalyzer());
        Query q 
= parser.parse("天天"); 
        
        
long start = System.currentTimeMillis();
        Hits hits 
= searcher.search(q);
        
long end = System.currentTimeMillis();
        
for(int i=0; i<hits.length(); i++) {
            liu.printDoc(hits.doc(i));
        }
        System.out.println(
"共找到: "+hits.length()+" 个文档,花了:"+(end-start)+"ms");
        
        
//多域搜索
        System.out.println("===========以下多域是查找'内容'结果============");
        
//从title或content找
        q = MultiFieldQueryParser.parse("内容"new String[] {"title""content"}, new BooleanClause.Occur[] {BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD}, new StandardAnalyzer());
        start 
= System.currentTimeMillis();
        hits 
= searcher.search(q);
        end 
= System.currentTimeMillis();
        
for(int i=0; i<hits.length(); i++) {
            liu.printDoc(hits.doc(i));
        }
        System.out.println(
"共找到: "+hits.length()+" 个文档,花了:"+(end-start)+"ms");
    }
    
    
/**
     * 显示文档内容
     
*/
    
private void printDoc(Document d) {
        System.out.println(
"标题: "+d.get("title")+", 作者: "+d.get("author")+", 日期: "+d.get("date")+", 内容: "+d.get("content"));
    }
    
    
/**
     * 创建一个Lucene文档
     
*/
    
private Document createDoc(String title, String author, String date, String content) {
        Document doc 
= new Document();
        doc.add(
new Field("title", title, Field.Store.YES, Field.Index.TOKENIZED));
        doc.add(
new Field("author", author, Field.Store.YES, Field.Index.NO));
        doc.add(
new Field("date", date, Field.Store.YES, Field.Index.NO));
        doc.add(
new Field("content", content, Field.Store.YES, Field.Index.TOKENIZED));
        
return doc;
    }
}
分享到:
评论
2 楼 chenlb 2009-03-27  
Term和QueryParser是两回事, 当然单独使用TermQuery效率高,QueryParser还要一个解析操作,QueryParser的开销比搜索的开销小得多。
1 楼 zhouwendong006 2009-03-27  
路过!前辈好强!
有个问题:
    Term和QueryParser哪个效率更好呢?在处理上百万条数据的时候,怎么做更好呢?

相关推荐

    Lucene简单使用需要的jar

    总的来说,Lucene的使用涉及了文本分析、索引构建、查询解析和结果返回等多个环节,通过这些库和工具,开发者可以构建出高效、精确的全文搜索引擎。而上述的jar包组合,提供了完成这些任务所需的基本组件。

    Lucene3.1使用教程

    **Lucene 3.1 使用教程** Lucene 是一个高性能、全文检索库,由Apache软件基金会开发并维护。它提供了一个简单但功能强大的API,使得开发者可以轻松地在应用程序中集成全文检索功能。本教程主要关注的是Lucene 3.1...

    Lucene 索引的简单使用

    以上就是关于“Lucene索引的简单使用”的详细介绍,包括其核心概念、创建和查询索引的步骤以及一些高级特性。希望对你理解和应用Lucene有所帮助。在实际开发中,可以根据需求选择合适的Analyzer,优化索引策略,以...

    使用lucene进行简单的开发

    【使用Lucene进行简单的开发】 Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发。它提供了完整的搜索功能,包括分析、索引和搜索文本。在这个教程中,我们将了解如何利用Lucene进行简单的开发。 ### 一...

    lucene简单介绍及solr搭建使用

    标题“lucene简单介绍及solr搭建使用”涉及了两个主要的开源搜索技术:Lucene和Solr。Lucene是Java开发的一个全文检索库,而Solr则是基于Lucene构建的企业级搜索平台,提供了更高级的功能和管理界面。 **Lucene简介...

    Lucene原理及使用总结

    一个简单的Lucene应用实例是搜索文本文档。例如,开发者可以创建一个索引目录,然后指定一个包含文本文档的数据目录。使用`Analyzer`(如CJKAnalyzer)对文本进行分析,通过`IndexWriter`将文档内容写入索引。这样,...

    Lucene使用代码实例之搜索文档

    以下是一个简单的示例代码,演示了如何使用Lucene搜索包含关键词"lucene"的文档: ```java public class TxtFileSearcher { public static void main(String[] args) throws Exception{ String queryStr = ...

    Lucene简单实例记录

    从给定的文件信息中,我们可以提取出关于Apache Lucene的基本使用和实例的详细知识点,以下是对这些知识点的深入解析: ### Lucene简介 Apache Lucene是一个高性能、全功能的文本搜索引擎库,由Java编写,提供了对...

    spring-lucene简单项目

    在"spring-lucene简单项目"中,我们将学习如何配置和使用Lucene来索引和检索数据。 项目开始时,你需要在Spring配置文件中声明Lucene的相关bean,如Analyzer(分析器)、Directory(存储索引的目录)和IndexWriter...

    IK分词器集成lucene4.5使用方法

    IK分词器是一款广泛应用于Java开发中的中文分词工具,主要为Lucene、Elasticsearch等全文搜索引擎提供支持。在本教程中,我们将探讨如何将IK分词器集成到Lucene 4.5版本中,以提升中文文本处理的效率和准确性。 ...

    Lucene的使用与优化

    ### Lucene的使用与优化 #### 一、Lucene简介 ...此外,还提供了一个简单的示例代码,帮助读者理解如何使用Lucene进行文档索引和搜索。希望这些知识点能够帮助大家更好地理解和使用Lucene这一强大的搜索引擎库。

    lucene3.0.3搜索的使用示例

    这个"lucene3.0.3搜索的使用示例"压缩包文件很可能是为了帮助用户理解并学习如何在项目中应用Lucene 3.0.3版本的功能。 在Lucene 3.0.3中,主要包含了以下核心概念和知识点: 1. **索引(Indexing)**:这是Lucene...

    Lucene 简单入门程序实例

    标题与描述:“Lucene简单入门程序实例”这一标题与描述明确指出文章将引导读者通过一个实际的示例来了解和掌握Lucene的基本操作。Lucene是一个高性能、全功能的文本搜索引擎库,它允许用户对文档进行索引和搜索。本...

    Lucene的简单介绍

    Lucene的目标是为软件开发人员提供简单易用的工具包,方便地在目标系统中实现全文搜索功能或构建一个完整的全文搜索引擎。 Lucene的主要优点包括: 1. 索引文件格式独立于应用平台:Lucene定义了一套以8位字节为...

    Lucene入门与使用

    Lucene入门与使用,非常简单,适合入门

    Lucene简单Demo(附带Jar)

    **Lucene的简单使用流程** 1. **创建Analyzer**: 根据需求选择或自定义分析器,例如使用StandardAnalyzer处理英文文本。 2. **创建Document**: 定义要索引的字段和内容,例如`document.add(new TextField("content...

    使用compass+lucene实现简单的全文检索功能

    本文将详细介绍如何使用 Compass 和 Lucene 实现一个简单的全文检索功能。 首先,Lucene 是一个高性能、全功能的文本分析库,主要用于信息检索。它提供了索引和搜索大量文本数据的能力,包括分词、分析、存储和搜索...

    LUCENE的搜索引擎例子

    本篇文章将深入探讨如何在B/S(浏览器/服务器)架构下利用Lucene实现一个简单的搜索引擎实例。 首先,我们需要了解Lucene的核心概念。Lucene提供了一套完整的文本检索框架,包括索引构建、查询解析、评分以及结果...

    Lucene示例 BM25相似度计算

    在Lucene中,查询可以是简单的关键词,也可以是复杂的布尔表达式。查询解析器将用户输入转化为 Lucene 可以理解的Query对象,然后执行查询,返回匹配的文档集合。在本示例中,我们将看到如何使用这些功能并对比不同...

Global site tag (gtag.js) - Google Analytics