- 浏览: 7331197 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 36101 lucene简介 1.1 什么是luc ... -
compass的开发應用JPA+Compass整合
2009-10-10 17:21 2500查询结果的高亮显示: 采用的是JPA的注解方式, 首 ... -
Spring ,JPA,Compass使用注解开发的博客站内搜索
2009-10-10 12:54 3919当一个网 ... -
Web搜索引擎技术
2009-09-25 13:38 2651一、Web搜索引擎技术综 ... -
搜索引擎技术原理
2009-09-25 13:37 2637一、搜索引擎的分类 ... -
搜索计算的规则
2009-05-15 10:28 2182面向Web应用的网页预处理2003年12月3日(讲稿由张志刚协 ... -
用 Lucene 加速 Web 搜索应用程序的开发
2009-05-02 09:18 20312006 年 9 月 06 日 Lucene 是基于 Jav ... -
用 Lucene 加速 Web 搜索应用程序的开发
2009-05-02 09:17 18302006 年 9 月 06 日 Lucene 是基于 Jav ... -
搜索引擎基本工作原理
2009-05-02 07:48 2045搜索引擎基本工作原理 了解搜索引擎的工作原理对我们 ... -
搜索引擎蜘蛛工作原理
2009-05-02 07:46 2579网站能在搜索引擎被搜 ... -
luence学习的指南文档(五)
2009-03-17 17:00 26626.搜索引擎的性能考虑信息: 索引数字:针对数字的检索 ... -
luence学习的指南文档(三)
2009-03-17 16:58 22653. 使用场合:多个搜索引擎查询的数据结果的合并信息操作:添 ... -
luence学习的指南文档
2009-03-17 16:56 29682.代码使用场合:在搜索引擎检索索引目录的中的信息 /** ... -
luence学习的指南文档
2009-03-17 16:54 2222搜索引擎学习总结(实战和使用场合) 备注以下代码使用的环境为 ... -
揭开神秘面纱,搜索引擎原理浅析
2009-03-17 16:10 1924在浩如烟海的Internet上,特别是其上的Web(World ... -
lucene全文检索应用示例及代码简析
2009-03-17 16:02 2133Lucene是apache软件基金会 jakarta项目组 ... -
关于lucene的学习笔记liui :转关于luncene 内层的研究
2009-03-17 15:59 2414现在已经不用去研究那些代码,但还是分享出来给大家以帮助。谢谢1 ... -
lucene大数据量的动态更新问题解决方式. 用内存
2009-03-17 15:55 4671问题: 目前索引里面已经有1000多万的数据了,现在需要每几分 ... -
lucene 自定义SORT
2009-03-17 15:54 3233如欲转载,请注明作者 ... -
限制lucene的遍历结果.
2009-03-17 15:54 2814Lucene Hack之通过缩小搜索结果集来提升性能 作者:c ...
相关推荐
Compass项目对于希望通过简单、高效、可扩展的方式管理数据中心的用户来说是一个非常实用的工具。它的开源特性意味着用户可以自由地使用和改进代码,同时参与到一个活跃的社区中。随着云计算和虚拟化技术的不断发展...
在实际应用中,"安卓人必看.txt"可能包含了关于如何在Android应用开发中集成Compass的教程或者最佳实践。虽然Compass主要用于Web开发,但考虑到跨平台的趋势,也可能有开发者尝试将其理念和方法应用到Android UI的...
而Compass是一个基于Sass的样式框架,提供了大量实用的样式库和工具,简化了CSS开发流程。 在书中,作者详细介绍了Sass的基础知识,包括如何设置环境、创建和导入.scss文件、定义变量、使用嵌套规则以及操作列表和...
在 Java Web 应用中,Compass 可以与服务器端技术如 JSP、Servlet 或者 MVC 框架(如 Spring MVC)集成,提供动态生成 CSS 的能力。通过 Compass,开发者可以在服务器端定义 CSS 规则,并在客户端浏览器中生成高效的...
Compass作为Sass的一个重要扩展,提供了丰富的CSS框架和实用模块,如网格系统、重置样式、字体图标等,帮助开发者快速构建响应式和可复用的CSS样式。 Compass的核心概念包括: 1. **配置文件**:Compass项目通常...
1. **样式框架**:Compass 提供了一套完整的 CSS 样式框架,包括按钮样式、表单元素、导航菜单等,可以快速应用到项目中,减少重复工作。 2. **网格系统**:Compass 包含了一个灵活的响应式网格系统,支持自定义列...
Compass不仅仅是一个框架,还包含了一系列实用的混合器、组件和其他工具,如网格系统、图像处理、色彩管理等,这些都可以极大地提高开发效率。 **主要特点:** - **内置混合器**: 提供了大量的预先定义好的混合器,...
《Sass和Compass设计师指南源代码》是一个深入解析Sass和Compass技术的资源集合,包含多个章节的源码示例,旨在帮助设计师更好地理解和应用这两种强大的CSS预处理器。Sass(Syntactically Awesome Style Sheets)是...
而Compass则是一个基于Sass的框架,它提供了大量的实用工具和样式库,简化Web开发中的样式工作。 首先,Sass的核心特性包括: 1. **变量**:允许我们定义和使用变量,如颜色、字体或任何CSS值,使得在整个样式表中...
将 Compass 集成到 Gulp 中,意味着开发者可以在构建过程中自动将 Sass 文件转换为标准的 CSS,同时应用 Compass 提供的样式和功能。 要使用 gulp-compass,首先确保你已经安装了 Node.js 和 npm(Node 包管理器)...
描述中的“好用的PPC多功能指南针”表明这款应用不仅具备基本的指南针功能,还可能包含其他实用工具。提到的“含手电筒”功能,意味着O2Compass不仅仅是一个导航工具,还能在需要时作为手电筒使用,增加了软件的实用...
Compass 是一个基于 Sass 的框架,提供了大量的实用工具和样式库,如网格系统、重置样式、图标字体等,大大简化了 CSS 开发工作。 在本资源包中,"初识 sass compass框架" 部分将引导你了解如何安装和设置 Sass 和 ...
例如,在Gmail或其他占用鼠标位置的网页应用中,Mouse Compass的功能可能无法正常工作,因为这些应用可能会覆盖或干扰指南针的显示。尽管目前这个问题尚未得到解决,但开发者LazyLabz表示他们正致力于在未来版本中...
`django-pipeline`是Django的一个第三方扩展,它的主要功能是对应用中的CSS和JavaScript进行合并和压缩,以减少HTTP请求的数量和文件大小,从而加快页面加载速度。它还支持自动化处理SASS、LESS等预处理器的源文件,...
通过下载并研究`sass-and-compass-in-action-master`这个项目,你将能掌握如何将SASS与Compass应用到实际项目中,提升CSS编码体验。实践过程中,你将遇到各种示例和应用场景,加深对这两项技术的理解,并能够自如地...
Compass是一款基于Sass的框架,Sass是Syntactically Awesome Style Sheets(语法超炫样式表)的缩写,是一个用于CSS扩展的开源语言。Compass将Sass的功能进一步拓展,提供了一系列预定义的混合(mixins)、函数和...
在实际开发中,Compass提供了诸如`border-radius`、`center`、`grid`等大量实用的混合,可以大大提高我们的开发效率。例如,我们可以使用`center`混合创建一个居中的布局: ```scss .centered { @include center; ...
"Lucene&Compass笔记"则专注于全文搜索引擎技术,Lucene是一个高性能、可扩展的信息检索库,而Compass是基于Lucene的一个对象关系映射(ORM)工具,它们在大数据处理和搜索应用中有着广泛应用。"项目笔记"可能涵盖了...
Compass提供了许多实用的样式库,如reset、grid系统、字体图标等,同时还简化了与Bootstrap的集成,让开发者能够更好地利用Bootstrap的组件,并自定义样式。 **Grunt**: Grunt是JavaScript的构建工具,用于自动化...
对于开发者来说,MongoDB还提供了丰富的编程语言驱动,如Python的PyMongo、Java的MongoDB Java Driver等,方便在各种应用中集成数据库操作。 在"工具"这个标签下,我们可能讨论到MongoDB的管理工具,如MongoDB ...