`

lucene3.0实例下载

阅读更多

简介:可以试试本站的lucene全文索引功能 http://ask.itruanjian.com/search/

项目里面有个lucene.sql文件,下面有源码下载地址

部分代码 LuceneDao.java

package lucene;
 
import java.io.File;
import java.util.ArrayList;
import java.util.List;
 
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Searcher;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.SimpleFSDirectory;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.wltea.analyzer.lucene.IKAnalyzer;
 
import service.IArticleService;
import service.imp.ArticleService;
import util.FileUtil;
import util.PaginationSupport;
import bean.Article;
@Aspect
public class LuceneDao implements ILuceneDao{
    private IArticleService articleService;
    /**
     * 当新增文章时同时更新索引
     */
    @AfterReturning("execution(* service.imp.ArticleService.save(..))&&args(article)")
    public void createIndex(Article article) throws Exception{
        String path=FileUtil.getLocalPath(Lucene.lucenePath);
        Directory dir = new SimpleFSDirectory(new File(path));
        boolean exist = IndexReader.indexExists(dir);
//      IndexWriter.isLocked(dir);
        IndexWriter writer = new IndexWriter(dir, new IKAnalyzer(), !exist, IndexWriter.MaxFieldLength.LIMITED);
        try {
            writer.addDocument(Lucene.createDocument(article));
        } finally {
            writer.close();
        }
    }
    /**
     * 对list集合的文章批量建了索引
     */
    public void createIndex(List<Article> articles) throws Exception{
        String path=FileUtil.getLocalPath(Lucene.lucenePath);
        Directory dir = new SimpleFSDirectory(new File(path));
        boolean exist = IndexReader.indexExists(dir);
        IndexWriter writer = new IndexWriter(dir, new IKAnalyzer(), !exist, IndexWriter.MaxFieldLength.LIMITED);
        try {
            for(Article article:articles){
                writer.addDocument(Lucene.createDocument(article));
            }
            writer.optimize();
        } finally {
            writer.close();
        }
    }
    /**
     * 
     */
    @AfterReturning("execution(* service.imp.ArticleService.del(..))&&args(article)")
    public void deleteIndex(Article article) throws Exception{
        String path=FileUtil.getLocalPath(Lucene.lucenePath);
        Directory dir = new SimpleFSDirectory(new File(path));
        boolean exist = IndexReader.indexExists(dir);
        if (exist) {
            IndexWriter writer = new IndexWriter(dir, new IKAnalyzer(), false,
                    IndexWriter.MaxFieldLength.LIMITED);
            try {
                if(article.getId()!=null&&!"".equals(article.getId())){
                    writer.deleteDocuments(new Term("id", article.getId().toString()));
                }else if(article.getSortid()!=null&&!"".equals(article.getSortid())){
                    writer.deleteDocuments(new Term("sortid", article.getSortid().toString()));
                }else{
                    writer.deleteAll();
                }
            } finally {
                writer.close();
            }
        }
    }
    /**
     * 
     */
    @AfterReturning("execution(* service.imp.ArticleService.update(..))&&args(article)")
    public void updateIndex(Article article) throws Exception{
        String path=FileUtil.getLocalPath(Lucene.lucenePath);
        Directory dir = new SimpleFSDirectory(new File(path));
        boolean exist = IndexReader.indexExists(dir);
        IndexWriter writer = new IndexWriter(dir, new IKAnalyzer(), !exist, IndexWriter.MaxFieldLength.LIMITED);
        try {
            if (exist) {
                writer.deleteDocuments(new Term("id", article.getId().toString()));
            }
            writer.addDocument(Lucene.createDocument(article));
        } finally {
            writer.close();
        }
    }
     
    public List<Article> searchList() throws Exception{
        String path=FileUtil.getLocalPath(Lucene.lucenePath);
        Directory dir = new SimpleFSDirectory(new File(path));
        return null;
    }
    /**
     * 
     */
    public PaginationSupport<Article> searchPage(Article article,int startIndex,int pageSize) throws Exception{
        String path=FileUtil.getLocalPath(Lucene.lucenePath);
        Directory dir = new SimpleFSDirectory(new File(path));
        Searcher searcher = new IndexSearcher(dir);
         
        Analyzer analyzer = new IKAnalyzer();
        Query query = Lucene.createQuery(article, analyzer);
        Sort sort = new Sort(new SortField[]{SortField.FIELD_SCORE,new SortField("createtime", SortField.INT, true)});
        TopDocs docs = searcher.search(query,null,startIndex+pageSize,sort);
//      TopDocs docs = searcher.search(query,startIndex+pageSize);
        PaginationSupport<Article> p = Lucene.getResultPage(searcher, docs, startIndex,
                pageSize);
         
        List<Article> ids = p.getItems();
        List<Article> articles = new ArrayList<Article>(ids.size());
        for(Article article2:ids){
            Article article3=articleService.getById(article2.getId());
            String title=Lucene.hight(query, analyzer, article3.getTitle(), 0);
            String content=Lucene.hight(query, analyzer, article3.getContent(), 150);
            if(title!=null){
                article3.setTitle(title);
            }
            if(content!=null){
                article3.setContent(content);
            }else{
                article3.setContent(Lucene.getNoHtml(article3.getContent(), 150));
            }
            articles.add(article3);
        }
        p.setItems(articles);
        return p;
    }
    public void setArticleService(IArticleService articleService) {
        this.articleService = articleService;
    }
     
}

 

下载地址:http://ask.itruanjian.com/?note_down/view/111.html

分享到:
评论

相关推荐

    lucene3.0 实例

    在这个实例中,我们将探讨如何在 JDK 1.5 和 Lucene 3.0 的环境下构建和运行一个简单的搜索引擎。 首先,Lucene 的核心概念包括文档(Document)、字段(Field)、索引(Index)和搜索(Search)。文档是存储信息的...

    lucene 3.0 入门实例

    **Lucene 3.0 入门实例** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发。它提供了完整的搜索功能,包括索引、查询解析、排序以及高级的文本分析能力。在 Lucene 3.0 版本中,开发者可以利用其强大...

    Lucene3.0之查询类型详解

    【Lucene3.0查询类型详解】 在Lucene3.0中,查询处理是一个关键环节,涉及多种查询方式和理论模型。以下是对这些概念的详细解释: 1. **查询方式**: - **顺序查询**:是最简单的查询方式,直接遍历索引,效率较...

    Lucene3.0入门实例含jar包

    **Lucene 3.0 入门实例及关键知识点** Lucene 是一个开源的全文搜索引擎库,由 Apache 软件基金会开发。它为开发者提供了在应用程序中实现文本搜索功能的强大工具。本实例主要针对 Lucene 3.0 版本,这个版本虽然...

    lucene3.0使用介绍及实例

    在本文中,我们将深入探讨Lucene 3.0版本,了解其核心概念、功能特性,并通过实例来展示如何使用这个强大的工具。 ### 1. Lucene 3.0核心概念 #### 1.1 文档与字段 在Lucene中,数据是以文档(Document)的形式...

    lucene3.0全文检索入门实例

    首先,你需要下载 Lucene 3.0 的发行版,并将其添加到你的项目类路径中。确保你的开发环境支持 Java 5 或更高版本,因为 Lucene 3.0 需要这个版本的 JVM。 **2. 创建索引** 创建索引是全文检索的第一步。在 Lucene ...

    lucene3.0基础实例

    《Lucene 3.0基础实例详解》 在IT领域,搜索引擎技术是不可或缺的一部分,而Apache Lucene作为一款开源的全文检索库,被广泛应用在各种信息检索系统中。本篇文章将深入探讨Lucene 3.0的基础实例,帮助读者理解和...

    lucene3.0庖丁+索引搜索程序

    本文将深入探讨Lucene3.0版本,结合“庖丁解牛”的精神,对其实现机制进行细致的剖析,并结合索引搜索程序的实例,帮助读者理解和应用这一强大的工具。 一、Lucene3.0概述 Lucene3.0是Apache软件基金会的一个项目...

    lucene3.0 整合庖丁解牛实例

    实例是一个java实例,可直接导入到MyEclipse中使用。 其中是lucene3.0整合了庖丁解牛分词法,添加了...因为lucene3.0无法整合paoding-analysis.jar 所以我已经把paoding-analysis中的源码整合进来了避免无法整合问题

    Apache Lucene3.0 入门实例介绍

    这个入门实例将引导我们了解如何使用Lucene 3.0版本进行基本的索引和搜索操作。以下是对Lucene 3.0关键知识点的详细讲解: 1. **Lucene的架构**: Lucene的核心组件包括文档(Document)、字段(Field)、索引...

    Lucene 3.0完成入门

    《Lucene 3.0 完成入门》 Lucene 是一个开源的全文检索库,由 Apache 软件基金会维护。它为开发者提供了一种高级的文本搜索功能,允许他们在应用程序中集成强大的搜索引擎。本篇文章将围绕 Lucene 3.0 版本,详细...

    lucene3.0 search

    《深入解析Lucene 3.0搜索技术》 在信息技术高速发展的今天,搜索引擎已经成为人们获取信息、解决问题的重要工具。作为开源全文检索库的代表,Apache Lucene为开发者提供了强大的文本检索功能,使得构建高效、精准...

    Lucene3.0创建索引

    ### Lucene3.0创建索引 在Lucene3.0中创建索引是一个关键功能,可以帮助用户快速地检索和管理大量的文本数据。本篇文章将详细介绍如何使用Lucene3.0来创建索引,并通过一个具体的例子来演示整个过程。 #### 一、...

    适合lucene3.0用的paoding-analysis的jar包

    《深入理解Lucene3.0与Paoding-Analysis集成应用》 在信息检索领域,Apache Lucene是一款强大的全文搜索引擎库,被广泛应用于各种信息检索系统。Lucene3.0是其历史版本之一,具备高效、灵活的特点。在这个版本中,...

    Lucene3.0增删改查和关键字高亮实例

    在这个“Lucene3.0增删改查和关键字高亮实例”项目中,我们将深入理解如何利用Lucene 3.0版本进行索引构建、文档的增删改查操作,并学习关键字高亮显示的实现方法。 首先,我们要了解**创建索引**的基本流程。在...

    基于lucene3.0的搜索器源程序

    以压缩包中的"luceneweb"为例,这是一个基于Lucene 3.0的Web搜索应用实例。它包含了Servlet类,用于处理搜索请求,以及相关的JSP页面,用于显示搜索表单和结果。开发者可以通过阅读和修改这些源代码,进一步理解...

    lucene3.0-api.CHM

    《Lucene 3.0 API CHM指南》 Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,广泛应用于各种搜索引擎和信息检索系统。本指南主要关注的是Lucene 3.0版本的API,这是一个强大的工具集,用于在Java环境...

    lucene 3.0 java示例

    这个“lucene 3.0 java示例”压缩包提供了一个具体的实例,演示如何在Java应用程序中使用Lucene 3.0版本来查询数据库。 在Lucene中,主要涉及以下几个核心概念: 1. **索引**:Lucene通过构建索引来提高搜索效率。...

    Lucene3.0_pdf

    《Lucene3.0原理与代码分析》是针对搜索引擎库Lucene 3.0版本的一份详尽解析,旨在帮助读者深入理解其内部工作机制和实现细节。Lucene是一款高性能、全文检索库,广泛应用于各类信息检索系统。下面将围绕Lucene的...

Global site tag (gtag.js) - Google Analytics