JAVA 全文搜索 struts2+spring+hibernte+compass整合记录

今天学习了全文搜索引擎compass,并且已经整合到S2SH中,将整合的过程记录一下,方便以后的查找:
1.建立搜索页面
<s:form action="search.action" method="post">
<s:textfield name="queryString" label="搜索产品"/>
<s:submit></s:submit>
</s:form>

2.建立相应的Action类:
代码片段:
/**
* 搜索
*
* @return
*/
public String search() {
List results = productManager.searchProducts(queryString);
System.out.println(results.size());
// 将搜索的结果放入ServletActionContext中,相当于struts1.x中的request对象
ServletActionContext.getRequest()
.setAttribute("searchresults", results);
return SUCCESS;
}

3.建立相应的业务接口
/**
*  商品业务接口
*/
package com.v512.example.service;

import java.util.List;

import com.v512.example.model.Product;

public interface ProductManager {
/**
* 增加商品
* @param p
*/
public void insertProduct(Product p);

/**
* 按照ID检索记录
* @param id
* @return
*/
public Product findProdcut(String id);

/**
* 按照商品名称检索记录
* @param queryString
* @return
*/
public List searchProducts(String queryString);

}

4.建立业务类接口的实现类:ProductManagerImpl
/**
* compass搜索 高亮显示
*/
public List searchProducts(String queryString) {
Compass compass = compassTemplate.getCompass();
CompassSession session = compass.openSession();
List list = new ArrayList();
CompassQueryBuilder queryBuilder = session.queryBuilder();
CompassBooleanQueryBuilder boolQuery = queryBuilder.bool();
boolQuery.addMust(queryBuilder.queryString(
"name:" + "*" + queryString + "*").toQuery());
// 匹配属性
// boolQuery.addShould(queryBuilder.queryString("name:" + queryString)
// .toQuery());
CompassHits hits = boolQuery.toQuery().hits();
for (int i = 0; i < hits.length(); i++) {
Product hit = (Product) hits.data(i);
String h = hits.highlighter(i).fragment("name");
if (h != null) {
// 设置值
hit.setName(h);
}
list.add(hit);
}
// 返回结果
return list;
}
在业务类接口中,实例化Compass

5.建立CompassIndexBuilder实现InitializingBean
作用:在启动服务器的时候,实现了spring的InitializingBean接口,让服务器启动,bean初始化的时候去建立索引

6.在web.xml文件中进行配置

7.建立applicationContext.xml和applicationContext-compass.xml
配置文件.

8.启动服务器,查询搜索结果.


最后将工程,上传上来,lib包文件太大,大家可以自己去下载!!

你可能感兴趣的:(java)