需求
接受所有传过来的搜索参数
参数如下
keyword=苹果&catalog3Id=225&skuPrice=_2000&attrs=18_晴雪:幻境&attrs=19_6.1英寸&sort=skuPrice_desc&pageNumber=2
分割参数主要使用split() 函数进行处理
- 检索
- 排序
- 分页
- 高亮特定属性
- 获取所有结果的属性,分类,品牌,以便attrs检索(聚合)
terms
- catalogId
- hasStock
- attrs.value
- attrs,id
rang
- skuPrice
排序
- sort:{属性} {asc/desc}
分页
- from to
高亮
- highlight 添加html标签
聚合
- brandVO,catalogVO,AttrVO 里面的属性需要以聚合的方式获得
处理思路
- SearchParam 封装搜索参数用于检索
- SearchResult 封装搜索结果供前端调用
- searchRequestBuild() 通过SearchParam构造检索语句用来向elsticsearch检索
SearchRequest searchRequestBuild(SearchParam searchParam)
- searchResultBuild() 将elasticsearch返回的检索结果封装成 SearchResult
SearchResult searchResultBuild(SearchParam searchParam,SearchResponse searchResponse)
- search() 使用 searchRequestBuild, searchResultBuild 来检索
SearchResult search(SearchParam searchService)
searchRequestBuild 方法
- 使用参数时需要先判空
- 属性问题:多属性检索时,每个属性都作为一个检索条件,而不是将每个属性都封装在一个条件中,这样检索结果为空,也就是一个属性不可能有两个id
- split:split 第二个参数默认为0,也就是默认会丢弃最后一个分割符后面的空串,所以需要设置第二个参数,防止报数组越界
SearchResult
- 从getAggregations拿到聚合时,要将声明为指定的聚合,默认返回一个接口
前端跳转
跳转方法:修改location.href的值,刷新页面。
参数
- 拼接时判断是否存在,如果存在是替换,不存在时增加
- 如果有?添加& 没有?则添加?