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;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值