- 浏览: 7253090 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
1 Compass中的操作
通过CompassSession我们可以进行save,delete, get,load。假如我们有两个domain Object,Author 和 Book,假如我们想要query Book的话要怎样做呢? 我们需要使用alias(这个属性定义在cmp文件中),
通过CompassQueryBuilder去构造CompassQuery, CompassQueryBuilder非常灵活,非常像Hibernate的Criteria查询。具体的sample请看 Working with objects
CompassHits hits = session.createQueryBuilder()
.queryString("+name:jack +familyName:london")
.setAnalyzer("an1") // use a different analyzer
.toQuery()
.addSort("familyName", CompassQuery.SortPropertyType.STRING)
.addSort("birthdate", CompassQuery.SortPropertyType.INT)
.hits();
2. CompassGps and CompassGpsDevice
CompassGps像是一个Service,他需要在application startup时启动服务, application shutdown停止服务,CompassGpsDevice不能独立的存在,他需要依赖CompassGps, CompassGps为CompassGpsDevice提供
Compass对象,他们一起为程序提供Index的实时更新。 Compass整合Hibernate 等等 persitance framework的代码就在CompassGpsDevice里,你需要提供不同的Device,如HibernateDevice, JDODevice。你也
可以实现自己的Device, CompassGpsDevice会把domain object的更新事件通过CompassGps去通知Compass去更新索引文件,这样就是可以实时更新index了。有兴趣的话可以看看Hibernate3GpsDevice的
registerEventsForHibernate31()方法,他给Hibernate的save,delete,update操作增加listener。当然我们可以使用aop自己去实现这块。CompassGps and CompassGpsDevice
3.
import org.compass.core.CompassCallback;
import org.compass.core.CompassException;
import org.compass.core.CompassHit;
import org.compass.core.CompassHits;
import org.compass.core.CompassQuery;
import org.compass.core.CompassQueryBuilder;
import org.compass.core.CompassSession;
import org.compass.core.CompassTemplate;
/**
* 搜索符合条件的记录数量
*
* @param keywords
* @return
*/
public Integer findTotal(final String keywords) {
return (Integer) this.getCompassTemplate().execute(
new CompassCallback<Integer>() {
public Integer doInCompass(CompassSession session)
throws CompassException {
CompassHits hits = session.find(keywords);
return hits.length();
}
});
}
/**
* 检索所有的博客的信息 幷且排序
*
* @param keywords
* @return
*/
public List<Blog> findTotal(final String keywords,
final SortPropertyType[] types, final String... sortFields) {
return this.getCompassTemplate().execute(
new CompassCallback<List<Blog>>() {
public List<Blog> doInCompass(CompassSession session)
throws CompassException {
List<Blog> result = new ArrayList<Blog>();
CompassQueryBuilder queryBuilder = session
.queryBuilder();
CompassQuery compassQuery = queryBuilder.queryString(
keywords).toQuery();
for (int i = 0; i < sortFields.length; i++) {
compassQuery.addSort(sortFields[i], types[i]);
}
CompassHits hits = compassQuery.hits();
for (CompassHit compassHit : hits) {
result.add((Blog) compassHit.getData());
}
return result;
}
});
}
/**
* 查询一定時間内的博库的信息(因爲我采用的Mysql時間保存格式YYYY-MM-dd 所以將時間转换同时将高亮显示)
* 备注我这里索引库检索的字段仅仅为subject和context所以仅仅检索了这两个字段
*
* @param start
* @param end
* @param keywords
* @return
*/
public List<Blog> search(final Date start, final Date end,
final String keywords) {
return this.getCompassTemplate().execute(
new CompassCallback<List<Blog>>() {
public List<Blog> doInCompass(CompassSession session)
throws CompassException {
List<Blog> result = new ArrayList<Blog>();
CompassQueryBuilder queryBuilder = session
.queryBuilder();
CompassQuery allpropertyQuery = queryBuilder
.queryString(keywords).toQuery();
CompassQuery dateRangeQuery = queryBuilder.between(
"publishTime", DateFormatUtils.format(start,
"YYYY-MM-dd"), DateFormatUtils.format(
end, "YYYY-MM-dd"), true);
CompassHits hits = queryBuilder.bool().addMust(
dateRangeQuery).addMust(allpropertyQuery)
.toQuery().hits();
for (int j = 0; j < hits.getLength(); j++) {
Blog blog = (Blog) hits.data(j);
// 针对要检索的字段高亮显示
String subject = null;
hits.highlighter(j).fragment("subject");
if (StringUtils.trim(subject).length() > 0) {
blog.setSubject(subject);
}
subject = null;
hits.highlighter(j).fragment("context");
if (StringUtils.trim(subject).length() > 0) {
blog.setContent(subject);
}
}
return result;
}
});
}
/**
* 采用反射使用一個實用性比較强的 查询一定時間内的博库的信息(所以將時間转换同时将高亮显示)
* 备注我这里索引库检索的字段仅仅为subject和context所以仅仅检索了这两个字段
*
* @param keywords
* @param clazz
* @param searchFields
* @return
*/
public List<Object> ReflectSearch(final String keywords, final Class clazz,
final String... searchFields) {
return this.getCompassTemplate().execute(
new CompassCallback<List<Object>>() {
public List<Object> doInCompass(CompassSession session)
throws CompassException {
List<Object> result = new ArrayList<Object>();
CompassQueryBuilder queryBuilder = session
.queryBuilder();
CompassQuery allpropertyQuery = queryBuilder
.queryString(keywords).toQuery();
CompassHits hits = allpropertyQuery.hits();
for (int j = 0; j < hits.getLength(); j++) {
Object o = hits.data(j);
try {
Object t = clazz.newInstance();
BeanUtils.copyProperties(t, o);
// 针对要检索的字段高亮显示
String subject = null;
for (String field : searchFields) {
subject = hits.highlighter(j).fragment(
field);
Field cfield = clazz
.getDeclaredField(field);
if (StringUtils.trim(subject).length() > 0) {
ReflectionUtils.setField(cfield, t,
subject);
}
}
result.add(t);
} catch (Exception e) {
continue;
}
}
return result;
}
});
}
/**
* 查询一定時間内的博库的信息(因爲我采用的Mysql時間保存格式YYYY-MM-dd 所以將時間转换)
*
* @param start
* @param end
* @param keywords
* @return
*/
public List<Blog> find(final Date start, final Date end,
final String keywords) {
return this.getCompassTemplate().execute(
new CompassCallback<List<Blog>>() {
public List<Blog> doInCompass(CompassSession session)
throws CompassException {
List<Blog> result = new ArrayList<Blog>();
CompassQueryBuilder queryBuilder = session
.queryBuilder();
CompassQuery allpropertyQuery = queryBuilder
.queryString(keywords).toQuery();
CompassQuery dateRangeQuery = queryBuilder.between(
"publishTime", DateFormatUtils.format(start,
"YYYY-MM-dd"), DateFormatUtils.format(
end, "YYYY-MM-dd"), true);
CompassHits hits = queryBuilder.bool().addMust(
dateRangeQuery).addMust(allpropertyQuery)
.toQuery().hits();
for (CompassHit compassHit : hits) {
result.add((Blog) compassHit.getData());
}
return result;
}
});
}
/**
* 根據特定自定查询如Blog content china
*
* @param field
* @param keywords
* @return
*/
public List<Blog> find(final String field, final String keywords) {
return this.getCompassTemplate().execute(
new CompassCallback<List<Blog>>() {
public List<Blog> doInCompass(CompassSession session)
throws CompassException {
List<Blog> result = new ArrayList<Blog>();
CompassQueryBuilder queryBuilder = session
.queryBuilder();
CompassQuery allpropertyQuery = queryBuilder.term(
field, keywords);
CompassHits hits = allpropertyQuery.hits();
for (CompassHit compassHit : hits) {
result.add((Blog) compassHit.getData());
}
return result;
}
});
}
/*
* 检索所有的博客的信息 (non-Javadoc)
*
* @see com.vnvtrip.search.jpa.blog.dao.IBlogSearchDAO#find(java.lang.String)
*/
public List<Blog> find(final String keywords) {
return this.getCompassTemplate().execute(
new CompassCallback<List<Blog>>() {
public List<Blog> doInCompass(CompassSession session)
throws CompassException {
List<Blog> result = new ArrayList<Blog>();
CompassQueryBuilder queryBuilder = session
.queryBuilder();
CompassQuery allpropertyQuery = queryBuilder
.queryString(keywords).toQuery();
CompassHits hits = allpropertyQuery.hits();
for (CompassHit compassHit : hits) {
result.add((Blog) compassHit.getData());
}
return result;
}
});
}
发表评论
-
Lucene全文搜索框架
2009-11-09 17:16 35731 lucene简介 1.1 什么是luc ... -
compass的开发應用JPA+Compass整合
2009-10-10 17:21 2458查询结果的高亮显示: 采用的是JPA的注解方式, 首 ... -
Spring ,JPA,Compass使用注解开发的博客站内搜索
2009-10-10 12:54 3868当一个网 ... -
Web搜索引擎技术
2009-09-25 13:38 2568一、Web搜索引擎技术综 ... -
搜索引擎技术原理
2009-09-25 13:37 2581一、搜索引擎的分类 ... -
搜索计算的规则
2009-05-15 10:28 2125面向Web应用的网页预处理2003年12月3日(讲稿由张志刚协 ... -
用 Lucene 加速 Web 搜索应用程序的开发
2009-05-02 09:18 19832006 年 9 月 06 日 Lucene 是基于 Jav ... -
用 Lucene 加速 Web 搜索应用程序的开发
2009-05-02 09:17 17942006 年 9 月 06 日 Lucene 是基于 Jav ... -
搜索引擎基本工作原理
2009-05-02 07:48 2000搜索引擎基本工作原理 了解搜索引擎的工作原理对我们 ... -
搜索引擎蜘蛛工作原理
2009-05-02 07:46 2530网站能在搜索引擎被搜 ... -
luence学习的指南文档(五)
2009-03-17 17:00 26216.搜索引擎的性能考虑信息: 索引数字:针对数字的检索 ... -
luence学习的指南文档(三)
2009-03-17 16:58 22223. 使用场合:多个搜索引擎查询的数据结果的合并信息操作:添 ... -
luence学习的指南文档
2009-03-17 16:56 29192.代码使用场合:在搜索引擎检索索引目录的中的信息 /** ... -
luence学习的指南文档
2009-03-17 16:54 2187搜索引擎学习总结(实战和使用场合) 备注以下代码使用的环境为 ... -
揭开神秘面纱,搜索引擎原理浅析
2009-03-17 16:10 1889在浩如烟海的Internet上,特别是其上的Web(World ... -
lucene全文检索应用示例及代码简析
2009-03-17 16:02 2102Lucene是apache软件基金会 jakarta项目组 ... -
关于lucene的学习笔记liui :转关于luncene 内层的研究
2009-03-17 15:59 2369现在已经不用去研究那些代码,但还是分享出来给大家以帮助。谢谢1 ... -
lucene大数据量的动态更新问题解决方式. 用内存
2009-03-17 15:55 4604问题: 目前索引里面已经有1000多万的数据了,现在需要每几分 ... -
lucene 自定义SORT
2009-03-17 15:54 3201如欲转载,请注明作者 ... -
限制lucene的遍历结果.
2009-03-17 15:54 2762Lucene Hack之通过缩小搜索结果集来提升性能 作者:c ...
相关推荐
compass2.1.4包+所用lucene包+中文分词器所用包
Compass_入门指南 Compass_入门文档
compass_使用详解.pdf compass_教程 compass_试用案例。
compass教程.pdf
compass文档资料
罗氏血糖管理软件Accu-Chek Compass V1.3.0.8 软件简体中文完全汉化补丁,本人原创汉化,友情分享!(本软件适用于使用罗氏诊断公司出品的血糖测量仪表的糖尿病患者)。
compass annotation关联关系
Compass的应用是对lucene的封装使用,关于限定搜索,等等 适合入门的初步了解 内有注释.
mongodb安装包和compass mongodb安装包和compass mongodb安装包和compass 可在node学习过程中使用
Beauty-Compass是在Android设备上运行的指南针的简单演示应用程序。 .zip,beauty compass是一个简单的在android设备上运行的compass演示应用程序。与日出日落事件相关的令人敬畏的设计。
是用于访问Montessori Compass网站的移动应用程序。 此应用程序提供对Montessori Compass在线服务( )的移动访问。 对于需要经常使用Montessori Compass服务检查/发送消息或查看照片的父母和管理员,此应用程序非常...
我们通过COMPASS测量了反应π-p→ηπ-p中ηπD波的新振幅分析。 利用基于相对论S矩阵原理的分析模型,我们发现可以用a2(1320)和受激a2'(1700)识别出两个共振,并对它们的极点位置进行全面分析。 对于a2的质量和...
Compass测试应用在eclipse工程,用于来测试Compass
COMPASS介绍COMPASS介绍COMPASS介绍COMPASS介绍COMPASS介绍
compass-reference,compass
Compass原理深入学习笔记,对于compass知识的一个梳理,希望对大家有用
Sass和Compass 实战
Sass和Compass预处理CSS,Sass(Scss)是世界上最成熟、稳定和强大的专业级CSS扩展语言,Sass(Scss)中文网主要致力于Sass(Scss)在中国的推广,通过Sass(Scss)来改变前端工程师,提高效率
MongoDB图形化管理工具 MongoDB Compass
compass搜索引擎技术 eclipse mysql 实现像google的搜索功能