http://jdkcn.com/entry/howto-add-highlight-in-compass.html
在myblog 1.5 P1版中我加入了Compass搜索的高亮支持。我参考了springside的代码实现了高亮,其实也是很简单的。在原来的searchController里面用的是默认的CompassSearchHelper来搜索的。
if (searchHelper == null) {
searchHelper = new CompassSearchHelper(getCompass(), getPageSize());
}
CompassSearchCommand searchCommand = new CompassSearchCommand();
searchCommand.setPage(new Integer(currentPage-1));
searchCommand.setQuery(query);
ModelAndView mv = new ModelAndView();
mv.addObject("query", query);
mv.addObject("p", currentPage);
List<String> errors = new ArrayList<String>();
try{
CompassSearchResults searchResults = searchHelper.search(searchCommand);
mv.addObject(getSearchResultsName(), searchResults);
}catch (SearchEngineQueryParseException ex){
errors.add(TextUtil.escapeHTML(ex.getMessage()));
mv.addObject("errors", errors);
}
本来打算按照springside里面的封装方法。http://svn.javascud.org/svn/springside/springside2/trunk/core/src/java/org/springside/components/compass/
这里有两个类AdvancedSearchCommand.java,CompassSearchService.java,CompassSearchService里面实现了高亮和排序,后来发现CompassSearchService和CompassSearchHelper长得很像,而且CompassSearchHelper也提供了两个抽象的方法给用户提供一个添加功能的机会。
/**
* An option to perform any type of processing before the hits are detached.
*/
protected void doProcessBeforeDetach(CompassSearchCommand searchCommand, CompassSession session, CompassHits hits,
int from, int size) {
}
/**
* An option to perform any type of processing after the hits are detached.
*/
protected void doProcessAfterDetach(CompassSearchCommand searchCommand, CompassSession session,
CompassDetachedHits hits) {
}
所以我们只要实现一个自己的CompassSearchHelper覆盖这两个方法就可以达到实现高亮的目的了。
/**
* @author <a href="mailto:rory.cn@gmail.com">somebody</a>
* @since Aug 23, 2007 2:04:19 PM
* @version $Id AdvanceCompassSearchHelper.java$
*/
public class AdvanceCompassSearchHelper extends CompassSearchHelper {
private String[] highlightFields;
public String[] getHighlightFields() {
return highlightFields;
}
public void setHighlightFields(String[] highlightFields) {
this.highlightFields = highlightFields;
}
/**
* @param compass
*/
public AdvanceCompassSearchHelper(Compass compass) {
super(compass);
}
/* (non-Javadoc)
* @see org.compass.core.support.search.CompassSearchHelper#doProcessBeforeDetach(org.compass.core.support.search.CompassSearchCommand, org.compass.core.CompassSession, org.compass.core.CompassHits, int, int)
*/
@Override
protected void doProcessBeforeDetach(CompassSearchCommand searchCommand,
CompassSession session, CompassHits hits, int from, int size) {
if (from < 0) {
from = 0;
size = hits.getLength();
}
if (highlightFields == null) {
return;
}
// highlight fields
for (int i = from; i < size; i++) {
for (String highlightField : highlightFields) {
hits.highlighter(i).fragment(highlightField);
}
}
}
ok,这样就可以实现高亮了。修改一下SearchController的配置。
<bean id="advanceCompassSearchHelper" class="com.jdkcn.compass.AdvanceCompassSearchHelper">
<property name="highlightFields">
<list>
<value>content</value>
</list>
</property>
<property name="pageSize"><value>10</value></property>
<constructor-arg ref="compass"/>
</bean>
<bean id="searchController" class="com.jdkcn.web.SearchController" parent="baseController">
<property name="compass"><ref bean="compass"/></property>
<property name="searchView"><value>search</value></property>
<property name="searchResultsView"><value>search</value></property>
<property name="pageSize"><value>10</value></property>
<property name="searchHelper"><ref local="advanceCompassSearchHelper"/></property>
</bean>
还不要忘了修改一下compass settings 修改一下高亮的样式,修改一下高亮的颜色。
<bean id="compass" class="org.compass.spring.LocalCompassBean">
<property name="resourceDirectoryLocations">
<list>
<value>classpath:com/jdkcn/compass</value>
</list>
</property>
<property name="connection">
<value>/lucene/indexes</value>
</property>
<property name="compassSettings">
<props>
<prop key="compass.transaction.factory">
org.compass.spring.transaction.SpringSyncTransactionFactory
</prop>
<prop key="compass.engine.highlighter.default.formatter.simple.pre">
<![CDATA[<font color="red"><b>]]>
</prop>
<prop key="compass.engine.highlighter.default.formatter.simple.post">
<![CDATA[</b></font>]]>
</prop>
</props>
</property>
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
</bean>
ok了,页面上输出一下就能看到最终效果了
${hit.highlightedText['content']?if_exists}
最终效果展示请看
分享到:
相关推荐
Compass搜索引擎技术是一种基于Lucene的全文检索框架,它提供了更高级别的API和集成机制,使得在Java应用程序中实现搜索引擎功能变得更加便捷。Compass的主要目标是将全文索引能力无缝地融入到现有的业务应用程序中...
Compass对象搜索引擎是一款基于Lucene的全文搜索引擎框架,它为Java开发者提供了高级的搜索功能,使得在应用程序中集成全文检索变得更加便捷。Compass的核心理念是将数据库中的对象与Lucene索引之间建立映射...
Lucene提供了底层的搜索功能,而Compass是对Lucene的高级封装,它在Lucene的基础上添加了更多便利的功能,如ORM集成、事务支持等。对于开发者来说,使用Compass可以更快地上手,减少对Lucene底层细节的了解,提高...
### Java搜索 Compass 资料知识点 #### 一、Compass 概述 Compass 是一个为 Java 应用程序提供全文检索功能的框架。它能够帮助开发者在 Java 应用程序中轻松实现复杂的搜索需求,并且具有较高的性能。Compass 基于...
Compass全文搜索是一个基于Apache Lucene的高性能、易用的全文搜索引擎工具。Lucene是Java开发的开源库,它提供了文本分析、索引和搜索的基本功能。而Compass则在Lucene的基础上进行了封装,使得开发者可以更方便地...
【compass完整可用项目】是一个基于特定技术栈的软件开发项目,该项目的核心是Compass库,一个与Lucene紧密集成的全文搜索引擎工具。Compass提供了一种简单的方式来在Java应用程序中集成全文搜索功能,使得开发者...
6. **动态过滤器**:Compass允许你在运行时动态添加、修改和删除过滤器,以实现灵活的搜索条件控制。 7. **地理空间搜索**:Compass还支持地理空间搜索,可以对地理位置数据进行有效的检索。 **入门指南** 对于...
Compass 是一个全文搜索引擎库,它是对 Lucene 的封装,为 Java 应用提供了一种简单易用的接口。在 Compass 中,Annotation 是一种元数据注解方式,它允许开发者在对象模型上直接定义搜索映射,使得对象与索引之间的...
标题 "Spring ,JPA,Compass使用注解开发的博客站内搜索" 涉及的是在Java开发环境中,利用Spring框架、Java Persistence API (JPA) 和 Compass搜索引擎来实现一个博客系统的站内搜索功能。这是一项关键的技术,因为...
本文将介绍Compass,一个基于Lucene的全文搜索引擎库,为Java开发者提供了一种简单易用的方式来集成全文检索功能。Compass不仅提供了与ORM框架(如Hibernate、JPA等)的无缝集成,还支持动态索引更新,使得实时数据...
Compass是一款基于Apache Lucene的全文搜索引擎框架,它为开发者提供了更高级别的抽象层,简化了搜索引擎的集成工作。在理解Compass之前,我们需要先了解全文检索的基本概念和原理。 全文检索是相对于传统的基于...
5. **展示结果**:在Struts2的视图层(通常为JSP页面),将搜索结果传递给模板,渲染成用户友好的格式。同时,展示分页链接,用户可以通过点击这些链接切换不同的结果页。 6. **优化与性能**:根据需求,你可能需要...
Compass全文检索是一个强大的搜索引擎库,它为Java应用程序提供了便捷的全文索引和搜索功能。在本实例中,我们有一个可直接运行的Compass全文检索系统,已经集成了SSH(Struts、Spring、Hibernate)框架,这是一个...
Compass是一个高级开源的Java搜索引擎框架,旨在简化应用程序与搜索引擎之间的集成过程。它通过结合强大的Lucene搜索引擎以及流行的应用框架如Hibernate和Spring,使得开发者能够轻松地将搜索功能融入到Java应用程序...
例如,使用Compass将数据库中的数据同步到Lucene索引中,然后通过Ajax实现前端与后端的无刷新通信,当用户在搜索框中输入关键词时,立即向服务器发送请求,服务器利用Lucene进行查询,并用Ajax返回结果,这样就能在...
1. **Lucene**: Apache Lucene是一个基于Java的全文搜索引擎库,通过它可以轻松地为Java应用程序添加全文搜索功能。Lucene的主要工作是对文件中的每个词进行索引,这种索引机制极大地提高了搜索效率。它提供了一组...
COMPASS 教程Pdf COMPASS 是一款专业的油气田设计和生产软件,主要用于油气田的规划、设计和生产过程。下面是 COMPASS 的一些重要知识点: 1. COMPASS WELLPLAN FOR WINDOWS 功能简介:COMPASS 的核心功能包括 ...
### Compass 使用详解 #### 一、Compass 概述 Compass 是一款开源的 Java 库,用于简化 Lucene 的使用。它通过提供类似于 Hibernate 的对象关系映射(ORM)功能,使得开发者能够更加轻松地将 Java 对象映射到 ...