solr 配置多个entity_solr检索商品数据

本文介绍了如何在SolrCloud环境下搭建和配置分布式搜索,并通过Java代码展示了商品信息的检索、分页和高亮显示。文章讨论了SolrCloud与Zookeeper的关系,前端检索系统的实现思路,以及Solr的高亮和区间过滤查询参数设置。
摘要由CSDN通过智能技术生成

1. Solr集群_SolrCloud环境搭建_数据导入

(1) 谈谈对象SolrCloud的理解,SolrCloud进行数据写入的工作过程。

SolrCloud(solr 云)是 Solr 提供的分布式搜索方案,当你需要大规模,容错,分布式索引和 检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用 SolrCloud 的, 当索引量很大,搜索请求并发很高,这时需要使用 SolrCloud 满足这些需求

f5512183396f8857608d3e2f59080e49.png

(2) 谈谈SolrCloud和Zookeeper集群的关系

SolrCloud 不同于 redis 集群自带集群,SolrCloud 是基于 Solr 和 Zookeeper 的分布式搜索方 案,它的主要思想是使用 Zookeeper 作为集群的配置信息中心

2. 创建门户ego-search-web项目

(1) 谈谈前端检索系统的实现思路

(2) 描述CloudSolrServer访问Solr集群的常用方法

3. 实现商品信息关键字检索_分页_高亮显示

(1) 描述Solr实现高亮显示的步骤

SearchItemServiceImpl:

package com.bjsxt.ego.search.service.impl;
import com.bjsxt.ego.rpc.pojo.TbItem;
import com.bjsxt.ego.rpc.service.ItemService;
import com.bjsxt.ego.search.dao.ItemDao;
import com.bjsxt.ego.search.entity.SearchResult;
import com.bjsxt.ego.search.service.SearchItemService;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
@Service
public class SearchItemServiceImpl implements SearchItemService {
@Autowired
SolrServer solrServer;
@Autowired
ItemService itemService;
@Autowired
ItemDao itemDao;
@Override
public SearchResult loadItemList(String item_keywords, Integer page) throws SolrServerException {
SolrQuery query = new SolrQuery();
/*设置默认查询字段*/
query.set("df","item_keywords");
/*设置查询条件*/
if(!StringUtils.isEmpty(item_keywords)){
query.setQuery(item_keywords);
}else{
query.set("q","*:*");
}
/*设置每页显示条数*/
Integer rows = 20;
/*设置最小页*/
if(page<1){
page = 1;
}
/*设置最大页*/
Integer maxPage = 100;
if(page>maxPage){
maxPage = page;
}
/*设置高亮*/
query.setHighlight(true);
query.addHighlightField("title");
query.setHighlightSimplePre("<font color='red'>");
query.setHighlightSimplePost("</font>");
/*执行查询获取结果*/
SearchResult result = itemDao.loadItemList(query);
result.setMaxpage(Long.parseLong(maxPage.toString()));
return result;
}
@Override
public TbItem selItemBuId(Long id) {
return itemService.selItemById(id);
}
}

ItemDaoImpl:

package com.bjsxt.ego.search.dao.impl;
import com.bjsxt.ego.search.dao.ItemDao;
import com.bjsxt.ego.search.entity.Item;
import com.bjsxt.ego.search.entity.SearchResult;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.beans.DocumentObjectBinder;
import org.apache.solr.client.solrj.impl.CloudSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Repository
public class ItemDaoImpl implements ItemDao {
@Autowired
CloudSolrServer cloudSolrServer;
@Override
public SearchResult loadItemList(SolrQuery query) throws SolrServerException {
QueryResponse resp = cloudSolrServer.query(query);
SolrDocumentList list = resp.getResults();
SearchResult result = new SearchResult();
result.setTotal(list.getNumFound());
/*获取高亮信息*/
Map<String, Map<String, List<String>>> highlighting = resp.getHighlighting();
//List<Item> itemList = new ArrayList<>();
//将docList转化为List<Item>
DocumentObjectBinder binder = new DocumentObjectBinder();
List<Item> itemList = binder.getBeans(Item.class,list);
for(Item item:itemList){
String id = item.getId();
//获得某个商品信息的高亮数据
Map<String, List<String>> map = highlighting.get(id);
//获得某个商品的某个字段的高亮数据
List<String> title = map.get("title");
if(title!=null&&title.size()>0){
item.setTitle(title.get(0));
}
}
result.setList(itemList);
return result;
}
}

(2) 描述Solr实现区间过滤查询的参数格式

1. 实现商品基本信息查询

(1) 描述实现查询商品基本信息的实现思路

当点击链接或者是图片链接时会发送一个请求,携带的参数为商品的id去查询商品的信息,将得到的查询的结果渲染给前台页面

(2) 描述商品基本信息显示图片响应格式

@RequestMapping("/{url}")
public String showPage(@PathVariable String url, String q, Model model,@RequestParam(defaultValue = "1") Integer page){
//调研业务层方法
String kws=null;
try {
kws = new String(q.getBytes("ISO-8859-1"),"UTF-8");
SearchResult result = searchItemService.loadItemList(kws,page);
model.addAttribute("query", kws);
model.addAttribute("itemList", result.getList());
model.addAttribute("page", page);
model.addAttribute("maxpage", result.getMaxpage());
} catch (Exception e) {
e.printStackTrace();
}
return url;
}

2. 实现商品描述查询_格参数信息查询

(1) 描述实现商品描述信息的查询思路

当加载页面时会发送一个ajax请求查询商品的详细信息,携带的参数为商品的id去查询商品的信息,将得到的查询的结果渲染给前台页面,会延时显示

(2) 描述实现商品规格参数信息的查询思路

当点击商品规格时会发送一个请求查询商品的规格信息,携带的参数为商品的id去查询商品的信息,将得到的查询的结果渲染给前台页面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值