多关键字搜索
3.1 多关键字搜索规则
我们之前测试都是使用单一的词(比如手机)来进行搜索,如果我们输入的关键字是一个复合的词组(比如三星手机),那 solr 如何进行搜索呢?
经过测试:
我搜索“三星”是 148 条记录
我搜索“手机”是 727 条记录
我搜索“三星手机”是 740 条记录
经过查看,发现结果中也包含了关键字只有三星和手机的记录,由此得出结论,solr 在搜索时是将搜索关键字进行分词,然后按照或的关系来进行搜索的。
你现在可能要说,为什么不是并的关系而是或的关系呢?如果你是电商网站的运营者,
肯定希望给用户更多的选择,因为如果采用并的关系来进行搜索时极有可能查询到很少的记录甚至查询不到任何记录。 另外这里还有他智能的排序策略,就是按照关键字匹配度来进行排序,也就是说如果记录中同时包含了三星和手机,那么这部分数据会排列在前面显示, 而只包含三星和只包含手机的记录会显示在后边。
3.1 多关键字搜索空格处理
有些用户会在关键字中间习惯性的输入一些空格,而这个空格输入后,很有可能查询不到结果了。我们测试输入“三星 手机”结果并没有查询到任何结果。所以我们还要对空格至于做一下处理,删除关键字中的空格
修改 pinyougou-search-service 的 ItemSearchServiceImpl.java
@Override
public Map<String, Object> search(Map searchMap) {
//关键字空格处理
String keywords = (String) searchMap.get("keywords"); searchMap.put("keywords", keywords.replace(" ", ""));
..................
}
排序
4.1 按价格排序
实现价格的排序(升降序可切换)
4.1.1 后端代码
修改 pinyougou-search-service 的 ItemSearchServiceImpl.java 添加排序的代码
/**
*根据关键字搜索列表
*@param keywords
*@return
*/
private Map searchList(Map searchMap){
........
//1.7 排序
String sortValue= (String) searchMap.get("sort");//ASC DESC String sortField= (String) searchMap.get("sortField");//排序字段
if(sortValue!=null && !sortValue.equals("")){
if(sortValue.equals("ASC")){
Sort sort=new Sort(Sort.Direction.ASC, "item_"+sortField); query.addSort(sort);
}
if(sortValue.equals("DESC")){
Sort sort=new Sort(Sort.Direction.DESC, "item_"+sortField); query.addSort(sort);
}
}
//高亮显示处理
......
return map;
}
4.1.1 前端代码
(1)修改 searchController.js 的 searchMap, 增加排序
$scope.searchMap={'keywords':'','category':'','brand':'','spec':{},'price':'','page No':1,'pageSize':40 ,'sortField':'','sort':'' };//搜索对象
(2)修改 searchController.js ,增加方法实现查询
//设置排序规则
$scope.sortSearch=function(sortField,sort){
$scope.searchMap.sortField=sortField;
$scope.searchMap.sort=sort;
$scope.search();
}
(3)修改页面 search.html
<div class="navbar-inner filter">
<ul class="sui-nav">
<li class="active">
<a href="#" ng-click="sortSearch('','')">综合</a>
</li>
<li>
<a href="#">销量</a>
</li>
<li>
<a href="#">新品</a>
</li>
<li>
<a href="#">评价</a>
</li>
<li>
<a href="#" ng-click="sortSearch('price','ASC')">价格↑</a>
转载于:https://blog.51cto.com/13517854/2285320