struts2+hibernate+spring+compass进行全文搜索
今天完成了一个搜索功能,把compass整合到项目当中,做一下笔记,希望对大家有用。
1.搜索文本框
<s:form action="search.action" method="post"><input class=lst type=text name=queryString maxlength=2048 value="<s:property value='queryString'/>" title="搜索"><input type=submit name="btnG" class=lsb value="搜索图书"></s:form>
public String search(){List results=productService.searchProducts(productVo.getQueryString());ServletActionContext.getRequest().setAttribute("searchresults", results);ServletActionContext.getRequest().setAttribute("queryString", productVo.getQueryString());return "search";}public List searchProducts(String queryString) {Compass compass = compassTemplate.getCompass();CompassSession session=compass.openSession();session.beginLocalTransaction();List list = new ArrayList();CompassHits hits= session.queryBuilder().queryString("name:"+queryString).toQuery().hits();for(int i=0;i<hits.length();i++){ProductInfo hit=(ProductInfo)hits.data(i);ProductInfo productInfo = this.find(hit.getId());String name_highlighter = hits.highlighter(i).fragment("name"); productInfo.setName(name_highlighter); list.add(productInfo);}session.close();return list;}<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"default-lazy-init="true"><bean id="annotationConfiguration"/><property name="compassSettings"><props><prop key="compass.transaction.factory">org.compass.spring.transaction.SpringSyncTransactionFactory</prop> <prop key="compass.engine.analyzer.MMAnalyzer.CustomAnalyzer">net.paoding.analysis.analyzer.PaodingAnalyzer </prop> <!--高亮显示配置start--> <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> <!--高亮显示配置end--> </props></property><property name="transactionManager" ref="transactionManager" /></bean><bean id="jpaGpsDevice" ref="entityManagerFactory" /> <property name="mirrorDataChanges"> <value>true</value> </property> </bean> <!-- 同步更新索引 --><bean id="compassGps" destroy-method="stop"><property name="compass" ref="compass" /><property name="gpsDevices"><list><beanref="jpaGpsDevice" /></bean></list></property></bean><bean id="compassTemplate"ref="compass" /></bean><!-- 定时重建索引(利用quartz)或随Spring ApplicationContext启动而重建索引 --><bean id="compassIndexBuilder"ref="compassGps" /><property name="buildIndex" value="true" /><property name="lazyTime" value="10" /></bean></beans>