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

lucene+compass

 
阅读更多

环境 lucene2.4 + compass2.2

1. xml 配置

   a. compass.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<compass-core-config
	xmlns="http://www.compass-project.org/schema/core-config"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.compass-project.org/schema/core-config
           http://www.compass-project.org/schema/compass-core-config-2.2.xsd">

	<compass name="default">
		<!-- 连接信息 -->
		<connection>
			<file path="./index/" />
		</connection>

		<!-- 声明映射信息 -->
		<mappings>
			<class name="com.tieba.hibernate.domain.Article" />

		</mappings>

		<!-- 其他配置 -->
		<settings>
			<!-- 配置分词器, 指定所用的分词器的全限定类名 -->
			<setting name="compass.engine.analyzer.default.type" value="jeasy.analysis.MMAnalyzer" />
			<!-- 指定摘要的文本长度 -->
			<setting name="compass.engine.highlighter.default.fragmenter.simple.size" value="50" />
			<!-- 配置高亮效果的前缀 -->
			<setting name="compass.engine.highlighter.default.formatter.simple.pre" value="&lt;span style='color:red'&gt;" />
			<!-- 配置高亮效果的后缀 -->
			<setting name="compass.engine.highlighter.default.formatter.simple.post" value="&lt;/span&gt;" />
		</settings>

	</compass>

</compass-core-config>

 

 

   b. CRUD操作

import java.util.ArrayList;
import java.util.List;

import org.compass.core.Compass;
import org.compass.core.CompassHits;
import org.compass.core.CompassSession;
import org.compass.core.CompassTransaction;
import org.compass.core.config.CompassConfiguration;

import com.tieba.hibernate.domain.Article;

public class ArticleIndexDao {
	private Compass compassSessionFactory;
	
	public ArticleIndexDao(){
		/* 1. 编程的方式 
		CompassConfiguration cfg = new CompassConfiguration();
		cfg.setConnection("./index");// 连接信息
		cfg.addClass(Article.class);// 声明映射信息
		// cfg.setSetting("key", "value");//其他配置
		// 配置分词器 // 指定所用的分词器的全限定类名
		cfg.setSetting("compass.engine.analyzer.default.type", "jeasy.analysis.MMAnalyzer");
		// 指定摘要的文本长度
		cfg.setSetting("compass.engine.highlighter.default.fragmenter.simple.size", "50");
		// 配置高亮效果的前缀
		cfg.setSetting("compass.engine.highlighter.default.formatter.simple.pre", "<span style='color: red'>");
		// 配置高亮效果的后缀
		cfg.setSetting("compass.engine.highlighter.default.formatter.simple.post", "</span>");
		compassSessionFactory = cfg.buildCompass();*/
		
		// 2. xml配置文件方式 
		CompassConfiguration cfg = new CompassConfiguration().configure();
		compassSessionFactory = cfg.buildCompass();
	}

	/**
	 * 保存索引
	 * @param article 文章
	 */
	public void save(Article article){
		// 得到CompassSession
		CompassSession session = compassSessionFactory.openSession();
		CompassTransaction tx = null;
		try {
			tx = session.beginTransaction();
			session.save(article);
			tx.commit();
		} catch (Exception e) {
			if (tx != null) {
				tx.rollback();
			}
		} finally {
			session.close();
		}
	}
	/**
	 * 删除索引
	 * @param id
	 */
	public void delete(Long id){
		CompassSession session = compassSessionFactory.openSession();
		CompassTransaction tx = null;
		try {
			tx = session.beginTransaction();
			session.delete(Article.class, id);
			tx.commit();
		} catch (Exception e) {
			if (tx != null) {
				tx.rollback();
			}
			e.printStackTrace();
		} finally {
			session.close();
		}
	}
	
	/**
	 * 搜索
	 * @param quertyString 关键词
	 * @return
	 */
	public List<Article> find(String quertyString){
		CompassSession session = compassSessionFactory.openSession();
		CompassTransaction tx = null;
		CompassHits hits = null;
		List<Article> list = new ArrayList<Article>();
		try {
			tx = session.beginTransaction();
			hits = session.find(quertyString);
			
			for (int i = 0; i < hits.length(); i++) {
				Article article = (Article) hits.data(i);
				// ====================================== 使用高亮器
				// 如果在高亮的属性值中没有出现关键词,就返回null
				String title = hits.highlighter(i).fragment("title");
				String content = hits.highlighter(i).fragment("content");
				if (title != null) {
					article.setTitle(title);
				}
				if (content != null) {
					article.setContent(content);
				}
				list.add(article);
			}
			tx.commit();
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			session.close();
		}
		return list;
	}
}

 

分享到:
评论

相关推荐

    Lucene+compass学习资料

    《深入探索Lucene+Compass技术与Ajax应用》 在当今的互联网开发中,数据检索和实时交互性已经成为不可或缺的功能。Lucene作为一个强大的全文搜索引擎库,为开发者提供了高效的文本搜索能力;Compass作为Lucene的一...

    Lucene+compass+spring+jdbc+庖丁的一个例子

    标题中的“Lucene+compass+spring+jdbc+庖丁的一个例子”揭示了这是一个关于整合多个技术来构建一个搜索系统的示例。在这个系统中,我们有以下几个关键组件: 1. **Lucene**: Apache Lucene 是一个高性能、全文本...

    Struts+Hibernate+spring+jpa+lucene+jbpm+compass配置文件

    Struts、Hibernate、Spring、JPA、Lucene、JBPM和Compass是Java开发中常用的一系列技术,它们各自在不同的领域发挥着重要作用。这里我们将深入探讨这些技术以及如何将它们整合在一起进行配置。 1. **Struts**:...

    struts2 + spring2.5 + hibernate 3.2 + lucene 2.4 + compass 2.0产品搜索

    struts2 + spring2.5 + hibernate 3.2 + lucene 2.4 + compass 2.0 包含所有jar包,按readme.txt导入并运行即可 开始不用分了................

    S2SH+compass (实现站内全文检索)

    Compass不仅包含了Lucene的核心功能,如索引创建、查询和优化,还额外提供了对JDBC、JPA等持久化技术的支持,可以直接对关系数据库中的数据进行全文检索。 在描述中提到的博客链接(已省略)可能详细解释了如何将这...

    ssh+compass实现站内搜索分页.rar

    Compass是一个基于Lucene的全文搜索引擎库,它简化了在Java应用中集成全文检索的功能。本教程将重点讲解如何使用SSH框架与Compass结合,实现在网站内的搜索分页功能。 首先,让我们深入了解SSH框架的每个组件: 1....

    struts2+spring2.5+hibernate3.26+compass2.1搜索引擎简单实现(无jar包)

    Compass是一款基于Lucene的全文搜索引擎,它使得Java应用能够方便地集成全文搜索功能。Compass提供了对JDBC、Hibernate等数据源的直接支持,可以自动索引数据库中的数据,实现快速检索。 在"struts2+spring2.5+...

    SSH+compass 整合

    本资源是struts2 + spring2.5 + hibernate 3.2 + lucene 2.4 + compass 2.0整合实例,可以为初学入门者,提供个参考,本人也是网上找的,感觉很不错(因其中所用的jar文件太大,无法上传,大家可以自己添加各框架...

    compass2.1.4包+所用lucene包+中文分词器

    Compass 是一个基于 Lucene 的全文检索框架,它提供了一种高级的、面向对象的方式来管理和集成搜索引擎到你的应用程序中。在“compass2.1.4包”中,包含了 Compass 框架的版本 2.1.4,这个版本可能包含了性能优化、...

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

    Compass 和 Lucene 是两个在 Java 开发环境中广泛使用的全文搜索引擎工具。它们可以帮助开发者构建高效、强大的文本搜索功能。本文将详细介绍如何使用 Compass 和 Lucene 实现一个简单的全文检索功能。 首先,...

    spring + hibernate + struts2 + compass2.1

    **Compass2.1** 是一个开源的全文搜索引擎,它基于Lucene,提供了与ORM框架(如Hibernate)的集成。Compass能够自动索引和搜索持久化对象,使得在Web应用中实现高效的数据检索变得简单。它支持实时索引更新,对...

    Compass+ lucene 通用代码(脱离数据库)

    《Compass+Lucene:构建高效全文搜索引擎》 在信息技术高速发展的今天,数据量的爆炸式增长使得传统的数据库查询方式面临着挑战。此时,全文搜索引擎以其快速、高效的特性,成为了处理大量非结构化文本数据的首选...

    JAVA 全文搜索 struts2+spring+hibernte+compass整合记录

    Struts2是一个流行的MVC框架,Spring是核心的依赖注入框架,Hibernate是ORM(对象关系映射)解决方案,而Compass则是一个基于Lucene的全文搜索引擎库,专门用于Java应用。接下来,我们将深入探讨这些组件以及它们...

    SSH2+compass2.2搜索实例(完整工程)

    Compass是一个全文搜索引擎库,它是Lucene的包装器,使得在Java应用程序中集成搜索引擎变得简单。Compass2.2引入了对Spring的深度集成,可以无缝地与Hibernate配合工作,实现实时索引和检索。它使得在应用程序中添加...

    基于lucene的compass框架

    Compass将lucene、Spring、Hibernate三者的起来,以很低很低的成本快速实现企业应用中的搜索功能。 ... 下面是compass在spring中的简明配

    compass+lucene

    在实际应用中,`compass+lucene`的组合使得开发者可以轻松地在Java应用中添加全文搜索功能,而无需深入了解搜索引擎的复杂细节。通过 Compass 的 ORM 集成,开发者可以直接在存储在数据库中的对象上执行全文搜索,这...

Global site tag (gtag.js) - Google Analytics