电商项目---商品数据检索

学习主题:商品数据检索

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

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

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

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

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

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

(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实现区间过滤查询的参数格式

在这里插入图片描述

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

(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;
}

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值