A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 谷粒姐姐 于 2018-9-25 14:50 编辑

多关键字搜索
3.1 多关键字搜索规则
我们之前测试都是使用单一的词(比如手机)来进行搜索,如果我们输入的关键字是一个复合的词组(比如三星手机),那 solr 如何进行搜索呢?
经过测试:
我搜索“三星”是 148 条记录
我搜索“手机”是 727 条记录
我搜索“三星手机”是 740 条记录

经过查看,发现结果中也包含了关键字只有三星和手机的记录,由此得出结论,solr 在搜索时是将搜索关键字进行分词,然后按照或的关系来进行搜索的。
你现在可能要说,为什么不是并的关系而是或的关系呢?如果你是电商网站的运营者,
肯定希望给用户更多的选择,因为如果采用并的关系来进行搜索时极有可能查询到很少的记录甚至查询不到任何记录。 另外这里还有他智能的排序策略,就是按照关键字匹配度来进行排序,也就是说如果记录中同时包含了三星和手机,那么这部分数据会排列在前面显示, 而只包含三星和只包含手机的记录会显示在后边。

3.1 多关键字搜索空格处理
有些用户会在关键字中间习惯性的输入一些空格,而这个空格输入后,很有可能查询不到结果了。我们测试输入“三星    手机”结果并没有查询到任何结果。所以我们还要对空格至于做一下处理,删除关键字中的空格
修改 pinyougou-search-service 的 ItemSearchServiceImpl.java
[AppleScript] 纯文本查看 复制代码
@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        添加排序的代码
[AppleScript] 纯文本查看 复制代码
/**

*根据关键字搜索列表

*@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,        增加排序
[AppleScript] 纯文本查看 复制代码
$scope.searchMap={'keywords':'','category':'','brand':'','spec':{},'price':'','page No':1,'pageSize':40  ,'sortField':'','sort':''  };//搜索对象
(2)修改 searchController.js        ,增加方法实现查询
[AppleScript] 纯文本查看 复制代码
//设置排序规则

$scope.sortSearch=function(sortField,sort){

$scope.searchMap.sortField=sortField;

$scope.searchMap.sort=sort;

$scope.search();

}
(3)修改页面 search.html
[AppleScript] 纯文本查看 复制代码
<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>

</li>


<li>

<a  href="#"  ng-click="sortSearch('price','DESC')">价格↓</a>

</li>


</ul>


</div>

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马