solr入门之搜索建议的具体查询及拼音加汉字搜索建议的思考
2016-03-29 18:38
519 查看
今天项目主要是完善已经完成的代码优化
----昨天写的多线程处理solr字段的问题可能会存在内存溢出的问题,还需要优化 下 ....
下面是拼音,汉字完成自动补全的 代码
关于拼音加汉字完成搜索就建议的思考:
查看百度的 搜索建议可以发现如下图
可以发现 百度做的处理也就是将汉字变为了拼音 然后再搜索即可
具体实现--
如果传过来的都是汉字---
如果传过来的都是字符--
如果传过来的是汉字加字符
三种方式的 处理方式---判断后在处理下
代码的实现大概都是差不多了 使用pinyin4j.jar来 完成汉字到拼音的 工作即可
其余的优化 下 代码就可以了
----昨天写的多线程处理solr字段的问题可能会存在内存溢出的问题,还需要优化 下 ....
下面是拼音,汉字完成自动补全的 代码
/** * 索引建议查询类 * @author songqinghu * */ @Controller @RequestMapping("/suggest/query") public class QuerySuggestController { @Resource private QuerySuggestService querySuggestServiceImpl; /** * * @描述:根据查询条件 查询提示词 * @return * @return ResultData<List<BaseSuggestIndex>> * @exception * @createTime:2016年3月28日 * @author: songqinghu */ @RequestMapping(value="/auto.json") @ResponseBody public ResultData<List<BaseSuggestIndex>> auto(SearchParams params){ ResultData<List<BaseSuggestIndex>> result = querySuggestServiceImpl.search(params); if(result ==null){ result = new ResultData<List<BaseSuggestIndex>>(); result.setSuccess(false); } return result; } }
/** * 搜索条件封装类 * @author songqinghu * */ public class SearchParams { private String q; //搜索主条件 private String order; //排序规则 private Integer start = 0;//起始坐标 private Integer rows = 30;//查询个数--产品要求30个 private String fl;//显示字段 private String type;//要查询的分类 public String getType() { return type; } public void setType(String type) { this.type = type; } public String getQ() { return q; } public void setQ(String q) { this.q = q; } public String getOrder() { return order; } public void setOrder(String order) { this.order = order; } public Integer getStart() { return start; } public void setStart(Integer start) { this.start = start; } public Integer getRows() { return rows; } public void setRows(Integer rows) { this.rows = rows; } public String getFl() { return fl; } public void setFl(String fl) { this.fl = fl; } }
@Service("querySuggestServiceImpl") public class QuerySuggestServiceImpl implements QuerySuggestService ,InitializingBean { private Logger logger = LoggerFactory.getLogger(QuerySuggestServiceImpl.class); @Resource private SolrServiceWrapper solrServiceWrapperImpl; //连接客户端 private SolrClient solrClient; @Value("${SORL_SUGGEST_NAME}") private String solrSuggestName; /** * 搜索接口主类 */ @Override public ResultData<List<BaseSuggestIndex>> search(SearchParams params) { String q = params.getQ(); SolrQuery query = new SolrQuery(); Formula f = new Formula(); //设置主查询条件--只有主条件呀 if(q !=null && q.trim().length()>0){ f.append(new Query(BaseSuggestIndex.Fd.suggest.name(), q+"*"));//关键在这一步 solr会完成搜索建议 } //设置显示的 字段 --固定值 word if(params.getFl() !=null && params.getFl().length()>0){ query.set(CommonParams.FL,params.getFl()); } //过滤的类型--确定属性 if(params.getType() !=null && params.getType().trim().length()>0){ query.setFilterQueries(BaseSuggestIndex.Fd.type.name()+":"+params.getType()); } String exe = f.toString(); //主条件--如果传过来的是空 ---先暂时返回空 以后可能返回热词语 if(exe.isEmpty()){ ResultData<List<BaseSuggestIndex>> result = new ResultData<List<BaseSuggestIndex>>(); result.setData(null); result.setTotalCount(0l); result.setSuccess(false); result.setMessage("查询条件为空"); return result; } query.set(CommonParams.Q,exe); query.setStart(params.getStart()); query.setRows(params.getRows()); query.setSort(BaseSuggestIndex.Fd.count.name(), ORDER.desc); //查询结果 try { QueryResponse response = solrClient.query(query); long numFound = response.getResults().getNumFound(); List<BaseSuggestIndex> words = response.getBeans(BaseSuggestIndex.class); logger.info("Date={},formula={},NumFound={}",new Date(), exe,numFound); ResultData<List<BaseSuggestIndex>> result = new ResultData<List<BaseSuggestIndex>>(); result.setData(words); result.setTotalCount(numFound); result.setSuccess(true); return result; } catch (Exception e) { logger.error(" q={} in job solr query fail.", query.getQuery(), e); return null; } } /** * 类加载后执行 客户端赋值 */ @Override public void afterPropertiesSet() throws Exception { solrClient = solrServiceWrapperImpl.getCollection(solrSuggestName); } }
关于拼音加汉字完成搜索就建议的思考:
查看百度的 搜索建议可以发现如下图
可以发现 百度做的处理也就是将汉字变为了拼音 然后再搜索即可
具体实现--
如果传过来的都是汉字---
如果传过来的都是字符--
如果传过来的是汉字加字符
三种方式的 处理方式---判断后在处理下
代码的实现大概都是差不多了 使用pinyin4j.jar来 完成汉字到拼音的 工作即可
其余的优化 下 代码就可以了
相关文章推荐
- closure!
- CMD 命令
- jquery.validation.js 表单验证 完整例子使用
- Android官方开发文档Training系列课程中文版:与其它APP交互之将用户带到其它的APP
- 微软笔试题
- memcached 介绍
- idea 配置maven
- Latin1的所有字符编码
- 【Python数据分析】Python3多线程并发网络爬虫-以豆瓣图书Top250为例
- linux嵌入式: 实现自己的tree命令
- 坚强的日子
- tomcat 配置 https, android端 访问
- 关于 DDL、 DML、 DCL详细解释
- 乐观锁-悲观锁
- 第四周项目1:求最大公约数
- 【USACO题库】1.2.1 Milking Cows挤牛奶
- Office Web Apps Server 服务器 安装文档
- 1003. Emergency (25)
- 【HPU】[1689]MZY寻宝
- hdu 1709 母函数