全文检索Lucene(四)---Compass框架

Compass是一个基于Lucene的高性能、事务型的全文搜索引擎映射框架,它为Java对象提供搜索功能,类似于Hibernate对JDBC的封装。本文介绍了Compass的版本、下载地址以及基本的jar包结构,并通过代码示例展示了如何进行增删改查和查询过滤与排序操作。
摘要由CSDN通过智能技术生成

Compass是一个强大的,事务的,高性能的对象/搜索引擎映射(OSEM:object/search engine mapping)与一个Java持久层框架。
Compass之于Lucene,就像Hibernate之于JDBC,Compass就是把Lucene封装了一层。
Compass目前版本是2.2.0,已经很久没有更新与维护。Compass2.2的版本所对应的Lucene2.4.1。

下载地址:http://www.compass-project.org/
解压后的目录结构:
这里写图片描述

开发的基本jar包在dist及其子目录下查找,主要如下,
这里写图片描述

代码示例:
Article.java

package com.my.bean;

import org.compass.annotations.Index;
import org.compass.annotations.Searchable;
import org.compass.annotations.SearchableBoostProperty;
import org.compass.annotations.SearchableId;
import org.compass.annotations.SearchableProperty;
import org.compass.annotations.Store;

@Searchable
public class Article {
	// 对于@SearchableId,默认是不可以进行查询的,在指定了name参数后,就可以使用这个属性查询了
	// 对于数字的属性,可以指定format为若干个0,表示要存成几个长度,如果不足这个长度,前面用'0'补齐
	@SearchableId(name = "id", format = "00000000")
	private Integer id;
	@SearchableProperty(name = "title", store = Store.YES, index = Index.ANALYZED)
	private String title;
	@SearchableProperty(name = "content", store = Store.YES, index = Index.ANALYZED)
	private String content;
	@SearchableBoostProperty
	private float boostValue = 1F;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public float getBoostValue() {
		return boostValue;
	}

	public void setBoostValue(float boostValue) {
		this.boostValue = boostValue;
	}

}


HelloWorld.java

package com.my.compass;

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 org.junit.Test;

import com.my.bean.Article;

public class HelloWorld {

	private CompassConfiguration cfg = new CompassConfiguration().configure();
	private Compass compassSessionFactory = cfg.buildCompass();

	// 建立索引(模拟在贴吧中发表了一个文章,会保存到数据库中,并且应该建立索引,以便能搜索到)
	@Test
	public void createIndex() throws Exception {
		// 模拟一条刚保存到数据库中的数据
		Article article = new Article();
		article.setId(1);
		article.setTitle("Lucene是全文检索的框架");
		article.setContent("如果信息检索系统在用户发出了检索请求后再去互联网上找答案,根本无法在有限的时间内返回结果。");

		// 建立索引 ?
		CompassSession session = compassSessionFactory.openSession();
		CompassTransaction tx = session.beginTransaction();
		session.create(article); // 创建索引
		tx.commit();
		session.close();
	}

	// 搜索
	@Test
	public void search() throws Exception {
		// 搜索条件
//		String queryString = "lucene";
		 String queryString = "compass";

		// 进行搜索,得到结果 ?
		List<Article> list = new ArrayList<Article>();
		CompassSession session = compassSessionFactory.openSession();
		CompassTransaction tx = session.beginTransaction();

		CompassHits hits = session.find(queryString);
		// int count = hits.length(); // 总结果数
		for (int i = 0; i < hits.length(); i++) {
			Article article = (Article) hits.data(i);
			// hits.score(i);
			list.add(article);
		}

		tx.comm
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值