`
tigers20010
  • 浏览: 48626 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

2010-01-04 传智播客—luncene (转载)

阅读更多

如果大家对文章内容有不理解的地方,尽情留言或QQ(1357208561) 讨论。让大家共同进步。

                                                                                                                               ————tiger20010

                                                                                                                          

 

 

我们这些网民,见得多了检索应用了。Google、百度、论坛内部搜索、网站内部搜索,这些应用使用的就是检索技术。今天我们学习的主要是针对WEB应用的内部文本检索,比如论坛。我们使用的框架是lucene。授课老师是汤阳光,年轻有为!

 

         搞技术的,看到什么新技术总是十分好奇。先不说googlebaidu吧(他们的专业检索技术很强哦),见到论坛内部的检索功能,就让我十分好奇。我原本以为论坛内部的检索就是模糊查找数据库,但今日的课程让我学习到了论坛内部真正的检索技术。

 

一、信息检索和全文检索

信息检索就是从信息集合中找出与用户需求相关的信息。被检索的信息除了文本外,还有图像、音频、视频等多媒体信息。我们只关注文本的检索,把用户的查询请求和全文中的每一个词进行比较,不考虑查询请求与文本语义上的匹配,这叫做全文检索。在信息检索工具中,全文检索是最具通用性和实用性的。例如,使用百度从一大堆网页中搜出与“传智播客”相关的网页。

 

我们简单看一下检索技术的流程:

请求

 

上面可见索引数据库是十分重要的,简单的说。全文检索系统,将网络上的数据通过某种格式保存到索引库中。当用户发送查询请求时,实质上就是向索引库查询。全文检索引擎负责处理用户的请求用索引库的更新等。

 

小时候查的汉语字典、英语词典我们是如何查询的?当然不是一页一页的翻了,靠的是字典的目录。Lucene的检索方式正是使用了此技术,lucene的索引库格式:

检索目录

 

数据

索引

关键字

索引

Documents…

1

C、汇编

1

汇编比机器在语言高级…C比汇编高级

2

C++

2

C++C高级..

3

JavaJ2E

3

JAVA应用级,最为优秀的语言

4

WEB

4

WEB是真正的计算机

5

你好

5

Hi,你好啊!

 

 

         上面的表只是简单说明lucene索引库的存储格式。我们通过lucene提供的类可以向索引库添加、修改、查询、删除操作

 

         关键字是通过分词器分析出来的,一般情况下各有语言有各字的分词器。分词器的强大提高了查询数据的接近性。

 

二、lucene操作

         我们编写一个对Article对象向lucene索引库的添加、修改、查询、删除操作:

import java.util.ArrayList;

import java.util.List;

import org.apache.lucene.analysis.Analyzer;

import org.apache.lucene.analysis.standard.StandardAnalyzer;

import org.apache.lucene.index.IndexWriter;

import org.apache.lucene.index.Term;

import org.apache.lucene.index.IndexWriter.MaxFieldLength;

import org.apache.lucene.queryParser.MultiFieldQueryParser;

import org.apache.lucene.queryParser.QueryParser;

import org.apache.lucene.search.IndexSearcher;

import org.apache.lucene.search.Query;

import org.apache.lucene.search.TopDocs;

import cn.itcast.cc.lucene.helloword.Article;

import cn.itcast.cc.lucene.helloword.utils.ArticleDocUtils;

 

public class IndexDao {

    // 索引目录

    private String indexPath = "./index";

    // 分词器

    private Analyzer analyzer = new StandardAnalyzer();

 

    /**

     * 保存记录

     *

     * @param art

     */

    public void save(Article art) {

        // lucene的写出索引类

        IndexWriter indexWriter = null;

        try {

            indexWriter = new IndexWriter(this.indexPath, this.analyzer,

                    MaxFieldLength.LIMITED);

            // 添加到索引库

            indexWriter.addDocument(ArticleDocUtils.Article2Doc(art));

        } catch (Exception e) {

            e.printStackTrace();

        }

        // 释放indexWriter

        if (indexWriter != null) {

            try {

                // 使用后一定要关闭

                indexWriter.close();

            } catch (Exception e) {

                e.printStackTrace();

            }

        }

    }

 

    /**

     * 更新记录

     *

     * @param art

     */

    public void update(Article art) {

        IndexWriter indexWriter = null;

        try {

            indexWriter = new IndexWriter(this.indexPath, this.analyzer,

                    MaxFieldLength.LIMITED);

            Term term = new Term("id", art.getId() + "");

            // 更新

            indexWriter.updateDocument(term, ArticleDocUtils.Article2Doc(art));

        } catch (Exception e) {

            e.printStackTrace();

        }

 

        // 释放indexWriter

        if (indexWriter != null) {

            try {

                indexWriter.close();

            } catch (Exception e) {

                e.printStackTrace();

            }

        }

    }

 

    /**

     * 删除记录

     *

     * @param id

     */

    public void delete(int id) {

        IndexWriter indexWriter = null;

        try {

            indexWriter = new IndexWriter(this.indexPath, this.analyzer,

                    MaxFieldLength.LIMITED);

            Term term = new Term("id", id + "");

            // 删除

            indexWriter.deleteDocuments(term);

        } catch (Exception e1) {

            e1.printStackTrace();

        }

 

        // 释放indexWriter

        if (indexWriter != null) {

            try {

                indexWriter.close();

            } catch (Exception e) {

                e.printStackTrace();

            }

        }

    }

 

    /**

     * 查询记录(具有分页功

分享到:
评论

相关推荐

    luncene.rar

    网上MMAnalyzer资源太少了,大多数初学者都会少导入JAR包,并且网上只有 je-analysis-MMAnalyzer的例子,而没有依赖包lucene-core-2.4.1.jar je-analysis-1.5.3.jar以及 luncene-heghlighter-2.4.1.jar

    Luncene2.0+Heritrix开发自己的搜索引擎01(源码)

    在构建一个自定义搜索引擎的过程中,Luncene 2.0 和 Heritrix 是两个关键的组件。Luncene 是一个流行的全文检索库,而 Heritrix 是一款强大的网络抓取工具,它们共同为搜索引擎的搭建提供了坚实的基础。下面将详细...

    Luncene API

    Luncene的API,详细接受了Luncene的使用方法

    luncene in action中文版

    luncene in action中文版 doc格式

    全文搜索luncene.Net

    **全文搜索Lucene.Net** Lucene.Net是一款开源的全文搜索引擎库,它为.NET开发者提供了强大的文本检索功能。作为Apache Lucene项目的.NET版本,它在.NET Framework上实现了原生Lucene的功能,使得.NET开发者也能...

    luncene api

    Apache Lucene是一个开源全文搜索引擎库,它为开发者提供了在各种应用程序中实现高级搜索功能所需的工具。Lucene API(Application Programming Interface)是这个库的核心部分,允许程序员与Lucene进行交互,构建...

    luncene jar包Java专用

    标题中的“luncene jar包Java专用”指的是专门为Java环境设计的Lucene库,以.jar文件形式提供,便于开发者集成到他们的项目中。这个库包含了所有必要的类和方法,使得开发人员能够构建自己的搜索引擎应用,对文本...

    ASP.NET with Luncene.net

    ASP.NET与Lucene.NET是两个在开发领域中广泛使用的开源技术。ASP.NET是Microsoft推出的用于构建Web应用程序的框架,而Lucene.NET则是一个强大的全文搜索引擎库,被许多开发者用来为他们的应用添加高效的搜索功能。...

    luncene

    luncene 简单的开原项目

    luncene索引PDF、Html、word.txt

    #### 概述 Lucene是一款高性能、全功能的文本搜索引擎库,被广泛应用于多种场景下的全文检索应用开发中。... #### Lucene基础概念 在深入了解如何处理特定类型的文档之前,我们需要先了解几个基本概念: ...

    基于Luncene的compass框架详解-java

    基于Lucene的Compass框架详解-Java 一、Compass框架概述 Compass是一个高性能的开源Java搜索引擎框架,旨在简化应用程序与搜索引擎之间的集成过程。它不仅利用了顶级的Lucene搜索引擎的强大功能,还融合了诸如...

    luncene in action 003

    标题与描述均为“luncene in action 003”,但是需要注意的是正确的拼写应为“Lucene in Action”,这是一本介绍Apache Lucene的书籍。由于提供的部分内容仅包含了一些重复的试读版本声明及网址,并未提供具体的章节...

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

    在构建一个自定义搜索引擎的过程中,Luncene 2.0 和 Heritrix 是两个关键的开源工具。Luncene 是一款强大的全文搜索引擎库,而 Heritrix 是一个网络抓取工具,它们共同为创建一个完整的搜索解决方案提供了基础。 **...

    luncene.jar

    在给定的压缩包文件“luncene.jar”中,包含了三个重要的Lucene组件:lucene-core-3.0.3.jar、lucene-highlighter-3.0.1.jar和lucene-memory-3.0.1.jar,这些组件是构建高效搜索引擎的基础。 首先,我们来看一下`...

    lucene笔记

    ### Lucene知识点详解 #### 一、Lucene简介 **1.1 什么是Lucene** Lucene是一个由Apache基金会维护的开源全文检索引擎工具包。它为开发者提供了一个简便的接口,使得在应用程序中实现高效的全文检索功能成为可能...

    luncene in action002

    根据提供的标题、描述、标签以及部分内容来看,似乎存在一定的误解,因为这些信息并没有提供关于“Lucene in Action002”具体内容的有效信息。“Lucene in Action”通常是一本书的名称,该书深入介绍了Apache Lucene...

    基于Java的Luncene的compass框架说明使用技术文档.pdf

    ### 基于Java的Luncene的Compass框架说明使用技术文档 #### 一、原理描述 Compass是一款优秀的开源Java搜索引擎框架,它能够帮助应用程序实现更为强大的搜索引擎语义能力。Compass依赖于顶级的Lucene搜索引擎,并...

    luncene 4.6 自定义查询评分规则

    在本篇文章中,我们将深入探讨如何在Lucene 4.6中实现自定义查询评分规则。此技术允许用户根据特定需求调整文档的相关性评分,从而更精确地满足搜索需求。 ### Lucene 4.6 自定义查询评分规则 ...

    luncene.net 完整实例

    **Lucene.NET 全面解析:构建高效文件内容搜索引擎** Lucene.NET 是一个开源全文搜索引擎库,基于 Java 版本的 Lucene,并针对 .NET 平台进行了优化。...本文将深入探讨 Lucene.NET 的核心概念和使用方法,以创建一个...

Global site tag (gtag.js) - Google Analytics