验证中...
本周日【珠海源创会】一起聊聊:PingCAP分布式事务、支付宝移动端实践、GSBN技术框架选型,点此报名占座
片段 1 片段 2 片段 3 片段 4 片段 5 片段 6
(dto)TbItemIndexResult.java
原始数据 复制代码
/**
* 从索引库查询的结果集合
*/
public class TbItemIndexResult {
//1 符合查询条件的总数
public long searchCount;
//2 根据查询结果计算出的总页数
public long pageCount;
//3 从索引库查询的结果集合
private List<TbItemIndex> list;
public long getSearchCount() {
return searchCount;
}
public void setSearchCount(long searchCount) {
this.searchCount = searchCount;
}
public long getPageCount() {
return pageCount;
}
public void setPageCount(long pageCount) {
this.pageCount = pageCount;
}
public List<TbItemIndex> getList() {
return list;
}
public void setList(List<TbItemIndex> list) {
this.list = list;
}
}
(controller)SearchIndexAction.java
原始数据 复制代码
@Controller
public class SearchIndexAction {
@Autowired
private SearchIndexService searchIndexService;
@RequestMapping("index")
public String index(){
return "index";
}
/**
*
* 检索,并返回查询到的结果集
* @param keyword 检索关键字
* @param pageIndex 当前页码值(默认为1)
* @return dto(1 查询到的总数 2 总页数 3 从索引库查到的对象集合)
*/
@RequestMapping("search")
public String search(String keyword, @RequestParam(defaultValue = "1")int pageIndex, Model model){
//1 判断检索关键字是否为空值
if(StrKit.notBlank(keyword)){
//2 通过外置文件获取每页显示的条数
int pageSize=PropKit.use("pageInfo.properties").getInt("search.pagesize");
//3 查询索引库,封装dto
TbItemIndexResult result = searchIndexService.SearchIndex(keyword, pageIndex, pageSize);
//4 将dto放入请求域中
model.addAttribute("result",result);
}
return "index";
}
}
(service)SearchIndexService.java
原始数据 复制代码
@Service
public class SearchIndexServiceImpl implements SearchIndexService {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private SearchIndexDao searchIndexDao;
/**
* 封装好query对象,将该对象交给dao层查询索引库
* @param keyword 前端传递的查询关键字
* @param pageIndex 当前页码
* @param pageSize 本页显示数量
* @return 查询到的结果封装
*/
@Override
public TbItemIndexResult SearchIndex(String keyword, int pageIndex, int pageSize) {
TbItemIndexResult result = null;
try {
/*0创建一个solr的查询对象,solr页面查询内容的封装
*/
SolrQuery query = new SolrQuery();
/*1 封装查询的关键字
*/
query.setQuery(keyword);
/*2 设置默认查询的字段
*/
query.set("df", "item_keywords");
/*3 设置分页信息
*/
//3.1 判断页码
if (pageIndex < 0) {
pageIndex = 1;
}
//3.2 设置分页查询起始索引
query.setStart((pageIndex - 1) * pageSize);
//3.3 设置页面显示条数
query.setRows(pageSize);
/* 4 设置高亮部分
*/
//4.1 开启高亮
query.setHighlight(true);
//4.2 设置高亮显示的字段
query.addHighlightField("item_title");
//4.3 设置高亮显示的前缀
query.setHighlightSimplePre("<em style='color:red'>");
//4.4 设置高亮显示的结尾
query.setHighlightSimplePost("</em>");
/*5 执行查询
*/
result = searchIndexDao.search(query, pageSize);
} catch (Exception e) {
logger.error(e.getMessage(),e);
e.printStackTrace();
}
return result;
}
}
(dao)SearchIndexDao.java
原始数据 复制代码
@Repository
public class SearchIndexDao {
@Autowired
private SolrServer solrServer;
private final Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* 从索引库中查询的结果进行封装到dto中,并返回
* @param query 封装的查询对象
* @param pageSize 当前页显示的条数
* @return
*/
public TbItemIndexResult search(SolrQuery query, int pageSize) {
//1 创建dto对象
TbItemIndexResult result = new TbItemIndexResult();
try {
//2 根据查询对象执行查询操作
QueryResponse queryResponse = solrServer.query(query);
//3 从响应信息获取查到的文档对象集合
SolrDocumentList documentList = queryResponse.getResults();
//3 获取查询结果总数
long searchCount = documentList.getNumFound();
//4 计算出总页数(退一进一法)
long pageCount = (pageSize + searchCount - 1) / pageSize;
//5 封装dto(1,2)
result.setPageCount(pageCount);
result.setSearchCount(searchCount);
/*
"highlighting": {
"925237"(id): {
"item_title(高亮显示属性)": [
"<em style=color:red>三星(高亮显示关键字)</em> Galaxy S4"
]
},{...},{...}
}
*/
//6 获取高亮集合
Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
/*
7 将查询到的document集合转化为TbItemIndex对象集合
*/
List<TbItemIndex> list = new ArrayList<>();
for (SolrDocument document : documentList) {
//7.1 普通属性封装
TbItemIndex itemIndex = new TbItemIndex();
itemIndex.setId(Long.parseLong((String) document.get("id")));
itemIndex.setImage((String) document.get("item_image"));
itemIndex.setPrice((Long) document.get("item_price"));
itemIndex.setCatName((String) document.get("item_category_name"));
itemIndex.setSellPoint((String) document.get("item_sell_point"));
//7.2 高亮title封装
List<String> stringList = highlighting.get("id").get("item_title");
String title = null;
/*
7.2.1 item_title非空,证明为高亮
"item_title": [
"<em style=color:red>三星</em> Galaxy S5 (G9009W) 金 电信4G手机 双卡双待双通"
]
*/
if (stringList != null && !stringList.isEmpty()) {
title = stringList.get(0);
} else {
/*
7.2.2 无高亮
"item_title": "三星 Galaxy Note 3 (N9008V) 32G版 白色 移动4G手机"
*/
title = (String) document.get("item_title");
}
//7.3 封装复杂属性title
itemIndex.setTitle(title);
//7.4 向集合中添加封装好的itemIndex对象
list.add(itemIndex);
}
//8 封装dto(3)
result.setList(list);
} catch (Exception e) {
logger.error(e.getMessage(), e);
e.printStackTrace();
}
//9 返回封装好的dto
return result;
}
}
(vo)TbItemIndex.java
原始数据 复制代码
/**
* 1 与索引库,前端,交互的对象
* 2 与索引库的document对象互相转化
* 注意:与schema.xml中的配置的属性对应(变量名可以不一致)
* 保证该类可以封装到document文档对象中
* schema.xml中不用定义id,默认就具备id
*/
public class TbItemIndex {
private Long id;
private String title;
private String sellPoint;
private Long price;
private String image;
private String catName;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSellPoint() {
return sellPoint;
}
public void setSellPoint(String sellPoint) {
this.sellPoint = sellPoint;
}
public Long getPrice() {
return price;
}
public void setPrice(Long price) {
this.price = price;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getCatName() {
return catName;
}
public void setCatName(String catName) {
this.catName = catName;
}
}
service中query对象的封装.png

评论列表( 0 )

你可以在登录后,发表评论

搜索帮助

12_float_left_people 12_float_left_close