千家信息网

Elastic搜索的使用方法

发表于:2024-09-28 作者:千家信息网编辑
千家信息网最后更新 2024年09月28日,本篇内容主要讲解"Elastic搜索的使用方法",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Elastic搜索的使用方法"吧!1、前端规格选项:点击规格选
千家信息网最后更新 2024年09月28日Elastic搜索的使用方法

本篇内容主要讲解"Elastic搜索的使用方法",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Elastic搜索的使用方法"吧!

1、前端

  • 规格选项:点击规格选项,需要拼凑条件

  • 点击不限,需要将对应条件移除

      "specList": {                "机身颜色": "金色",        "内存": "3GB"        },

1.2、前端实现

  • 1、修改 ~/pages/_cid.vue组件,给每一个选项绑定事件(含"不限")

    • 参数:规格名称、选项的值、event(鼠标事件对象,用于回显)

  • 2、编写specSearch函数,用于操作data查询条件,需要在searchMap添加specList条件

    • 如果选项值不为Null,添加条件

    • 如果选项值为Null,删除条件

specSearch(specName, optionName, e) {   //参数1:specName 规格名称   //参数2:optionName 规格选项的值   //1) 处理条件:选择值,如果存在添加条件,如果不存在删除条件    if (optionName){      //存在      this.searchMap.specList[specName] = optionName;    } else {      //不存在      delete this.searchMap.specList[specName];    }            //重新查询      this.searchList();      //方式1:jquery代码 处理回显  //获得事件源 a 标签,再获得父标签
,再添加用时 $(e.target).parent().addClass("cur"); //获得 a 标签父元素的所有,将样式移除 $(e.target).parent().siblings().removeClass("cur"); },

1.2.1、品牌查询

需要使用修改后的品牌进行查询

   brandSearch(bid) {      //切换品牌      this.searchMap.brandId = bid;      //查询      this.searchList();    },

1.2.2、关键字查询

  • 1、修改头部搜索的组件,添加keyword变量与文本框进行数据绑,给搜索按钮绑定事件

      data() {    return {      keyword: ""    };  }


  • 2、操作vuex,将keyword保存到vuex中

    • 注意:vuex中必须有对应的变量

    • sotre/index.js

      //state区域,相当于定义变量export const state = () => ({    user: null,    keyword: null})//mutations区域,用于修改数据export const mutations = {    setData(state, obj) {        state[obj.key] = obj.value    }}


    • HeaderSearch.vue

  • 3、修改列表页面,添加 watch 对 vuex 中keyword进行监控,如果数据发生改变进行查询

  • 注意:在 watch 只能使用普通fuction,不能使用箭头函数

      watch: {    "$store.state.keyword": function(newValue, oldValue) {      //添加 keyword 查询条件      this.searchMap.keyword = newValue;      //查询      this.searchList();    }  }


1.2.3、排序

  • 价格的需求:

    • 第一次点击时,按照价格升序进行排序

    • 第一次之后,按照当前排序取反进行操作。

  • 1、给排序的按钮绑定事件,传递唯一标识(xl、sj等)、点击后加上高亮

      
    排序:
    销量
    价格
    评论数
    上架时间
    价格: -


  • 2、编写排序函数 sortSearch,根据点击次数,修改升降序方法

        sortSearch(sortBy) {      //第一次点击、之后切换排序方式        if (this.searchMap.sortBy == sortBy) {        //点击第二次切换排序方式        this.searchMap.sortWay =          this.searchMap.sortWay == "asc" ? "desc" : "asc";      } else {        //第一次默认升序        this.searchMap.sortBy = sortBy;        this.searchMap.sortWay = "asc";      }      this.searchList();    }


1.2.4、价格区间

 -

1.2.5、分页

  • 1、拷贝分页组件


  • 2、导入分页组件

  • 3、使用分页组件,总条数、每页显示的个数、回调函数


    • total属性:总条数 (查询结果)

    • page_size:每页显示个数(查询条件)

    • @page_changed :每一页需要执行函数

  • 4、编写回调函数,处理页面切换

       pageChanged: function(pageNum) {      //根据第几页查询数据      this.searchMap.pageNum = pageNum;      //查询      this.searchList();    }


2、后端

Controller

package com.czxy.controller;import com.czxy.service.SkuSearchService;import com.czxy.vo.BaseResult;import com.czxy.vo.SearchVo;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;import java.util.Map;/** * @author 庭前云落 * @Date 2020/4/15 21:39 * @description */@RestController@RequestMapping("/sku")public class SkuSearchController {    @Resource    private SkuSearchService skuSearchService;    @PostMapping("/search")    public BaseResult findSkus(@RequestBody SearchVo searchVo) {        if (searchVo.getCatId() == null) {            return BaseResult.error("分类不能为空");        }        Map search = skuSearchService.search(searchVo);        System.out.println(search);        return BaseResult.ok("查询成功", search);    }}

Service

package com.czxy.service.impl;import com.czxy.repository.SkuRepository;import com.czxy.service.SkuSearchService;import com.czxy.vo.ReturnSku;import com.czxy.vo.SearchSku;import com.czxy.vo.SearchVo;import org.apache.commons.lang.StringUtils;import org.elasticsearch.index.query.BoolQueryBuilder;import org.elasticsearch.index.query.QueryBuilders;import org.elasticsearch.search.sort.SortBuilders;import org.elasticsearch.search.sort.SortOrder;import org.springframework.data.domain.Page;import org.springframework.data.domain.PageRequest;import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;import org.springframework.stereotype.Service;import javax.annotation.Resource;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * @author 庭前云落 * @Date 2020/4/15 21:40 * @description */@Servicepublic class SkuSearchServiceImpl implements SkuSearchService {    @Resource    private SkuRepository skuRepository;    public Map search(SearchVo searchVo){        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();        //分类查询        boolQueryBuilder.must(QueryBuilders.termQuery("catId",searchVo.getCatId()));        //关键字查询        if(StringUtils.isNotBlank(searchVo.getKeyword())){            boolQueryBuilder.must(QueryBuilders.matchQuery("skuName",searchVo.getKeyword()));        }        //品牌查询        if(searchVo.getBrandId()!=null){           boolQueryBuilder.must(QueryBuilders.termQuery("brandId",searchVo.getBrandId()));        }        //规格查询        Map specList = searchVo.getSpecList();        if(specList!=null){            for (Map.Entry entry : specList.entrySet()) {                String key = entry.getKey();                String value = entry.getValue();                boolQueryBuilder.must(QueryBuilders.termQuery("spces."+key+".keyword",value));            }        }        if(searchVo.getMaxPrice()!=null&&searchVo.getMaxPrice()!=null){            boolQueryBuilder.must(QueryBuilders.rangeQuery("price").gte(searchVo.getMinPrice()).lt(searchVo.getMaxPrice()));        }        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();        queryBuilder.withQuery(boolQueryBuilder);        if (searchVo.getSortBy()!=null){            if(searchVo.getSortBy().equals("xl")&&searchVo.getSortWay().equals("asc")){                //销量升序                queryBuilder.withSort(SortBuilders.fieldSort("sellerCount").order(SortOrder.ASC));            }else  if(searchVo.getSortBy().equals("xl")&&searchVo.getSortWay().equals("desc")) {                // 销量降序                queryBuilder.withSort(SortBuilders.fieldSort("sellerCount").order(SortOrder.DESC));            }else if(searchVo.getSortBy().equals("jg")&&searchVo.getSortWay().equals("asc")){                // 价格升序                queryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.ASC));            }else  if(searchVo.getSortBy().equals("jg")&&searchVo.getSortWay().equals("desc")) {                // 价格降序                queryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.DESC));            }else if(searchVo.getSortBy().equals("pl")&&searchVo.getSortWay().equals("asc")){                // 评论升序                queryBuilder.withSort(SortBuilders.fieldSort("commentCount").order(SortOrder.ASC));            }else  if(searchVo.getSortBy().equals("pl")&&searchVo.getSortWay().equals("desc")) {                // 评论降序                queryBuilder.withSort(SortBuilders.fieldSort("commentCount").order(SortOrder.DESC));            }else if(searchVo.getSortBy().equals("sj")&&searchVo.getSortWay().equals("asc")){                // 上架时间                queryBuilder.withSort(SortBuilders.fieldSort("onSaleTime").order(SortOrder.ASC));            }else  if(searchVo.getSortBy().equals("sj")&&searchVo.getSortWay().equals("desc")) {                // 上架时间                queryBuilder.withSort(SortBuilders.fieldSort("onSaleTime").order(SortOrder.DESC));            }        }        // 2.2 分页        queryBuilder.withPageable(PageRequest.of(searchVo.getPageNum() - 1 ,searchVo.getPageSize()));        //3 查询,获取结果        // 3.1 查询        Page pageInfo = this.skuRepository.search(queryBuilder.build());        // 2.2 总条数        long total = pageInfo.getTotalElements();        // 3.3 获取返回结果 ,组装返回数据(SearchSku-->Return)        List list = pageInfo.getContent();        List returnList = new ArrayList<>();        for(SearchSku sku:list){            //创建 ReturnSku对象            ReturnSku rs = new ReturnSku();            //依次填充数据            rs.setId(sku.getId().intValue());            rs.setGoodsName(sku.getSkuName());            rs.setMidlogo(sku.getLogo());            rs.setCommentCount(sku.getCommentCount());            rs.setPrice(sku.getPrice());            returnList.add(rs);        }        // 3.4 封装        Map result = new HashMap();        result.put("count" , total);        result.put("list" ,returnList);        return result;    }}

到此,相信大家对"Elastic搜索的使用方法"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

查询 条件 排序 价格 数据 函数 规格 方法 搜索 事件 升序 组件 品牌 第一次 切换 使用方法 个数 参数 变量 方式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 戴尔服务器 客服 数据库管理员的调研报告 郑州服务器回收免费咨询 数据库加密和删除 学生选课与教师任课的数据库设计 安溪县天桥网络技术有限公司 服务器与管理需求分析 web服务器由哪三部分组 手机数据库怎么迁移 网络安全发生的风险增大 尚肯上海互联网科技有限公司 电脑管家如何关闭网络安全防护 超市管理系统课程设计报告数据库 人事管理系统数据库实践报告 上海赢车互联网科技有限公司电话 服务器远程安全管理方式 oecd跨国数据库 数据库数值策划设计 速腾网络技术 网络安全活动发言 把数据存在微软服务器安全吗 花生壳云服务器 网络安全防护相关职位 数据库怎么打开表 问道手游变态服务器微信扫码下载 泾县新能源软件开发服务检修 不属于网络技术发展趋势 江苏新能源软件开发一体化 斗鱼无法连接服务器 嵌入数据库设计
0