compass 的多条件搜索排序加分页
来源:互联网 发布:第三方下载软件 编辑:程序博客网 时间:2024/04/28 13:48
虚的就不多说了直接上代码
public QueryResult<Product_InfoBean> getSearch_Product(final Product_InfoBean product){ return this.getCompassTemplate().execute( new CompassCallback<QueryResult<Product_InfoBean>>() { public QueryResult<Product_InfoBean> doInCompass(CompassSession session)throws CompassException { QueryResult<Product_InfoBean> qr=new QueryResult<Product_InfoBean>(); long beginTime = System.currentTimeMillis(); List<Product_InfoBean> result = new ArrayList<Product_InfoBean>(); CompassQueryBuilder queryBuilder = session.queryBuilder(); /* 搜索条件 * 如果所有条件都不满足则都为 click_Num>0,即:点击量都大于1,用于列出全部内容 * */ //价格大于 小于 等于 CompassQuery price=queryBuilder.gt("click_Num","0"); if(!StringUtils.isNullOrEmpty(product.getD_Price())&&!StringUtils.isNullOrEmpty(product.getX_Price())){ double d=Double.parseDouble(product.getD_Price()); double x=Double.parseDouble(product.getX_Price()); if(x>0&&d>0&&x<d){ price=queryBuilder.between("qudao_Price", product.getD_Price(),product.getX_Price(),true); }else{price=queryBuilder.gt("click_Num","0");} }else{price=queryBuilder.gt("click_Num","0");} //一级分类 CompassQuery bigkind_Id=queryBuilder.gt("click_Num","0"); if(!StringUtils.isNullOrEmpty(product.getBigkind_Id())){ bigkind_Id=queryBuilder.spanEq("bigkind_Id", product.getBigkind_Id()); } //二级分类 CompassQuery skind_Id=queryBuilder.gt("click_Num","0"); if(!StringUtils.isNullOrEmpty(product.getSkind_Id())){ skind_Id=queryBuilder.spanEq("skind_Id", product.getSkind_Id()); } //三级分类 CompassQuery tkind_Id=queryBuilder.gt("click_Num","0"); if(!StringUtils.isNullOrEmpty(product.getTkind_Id())){ tkind_Id=queryBuilder.spanEq("tkind_Id", product.getTkind_Id()); } //搜索关键字 CompassQuery keywords=queryBuilder.gt("click_Num","0"); if(!StringUtils.isNullOrEmpty(product.getKeywords())){ keywords=queryBuilder.queryString(product.getKeywords()).toQuery(); } //不包含关键字的条件 暂时不需要 /* 排序开始(默认按时间排序) * * 分别按 价格 、点击量、订货量、上架时间 * * 多个索引不指定排序字段类型会报 * Exception: java.lang.RuntimeException: field "xxx" does not appear to be indexed */ String plsx="add_Time"; SortPropertyType type=SortPropertyType.STRING; if(!StringUtils.isNullOrEmpty(product.getSx())){ if(product.getSx().trim().equals("jg")){ //价格 plsx="qudao_Price"; type=SortPropertyType.DOUBLE; }else if(product.getSx().trim().equals("dn")){ //点击量 plsx="click_Num"; type=SortPropertyType.LONG; }else if(product.getSx().trim().equals("xn")){ //订货量 销售量 plsx="sell_Num"; type=SortPropertyType.LONG; }else if(product.getSx().trim().equals("sj")){ //按时间 plsx="add_Time"; type=SortPropertyType.STRING; } }else {plsx="add_Time";type=SortPropertyType.STRING;} // 升降(默认降序) SortDirection zd=SortDirection.REVERSE; if(!StringUtils.isNullOrEmpty(product.getZd())){ if(product.getZd().trim().equals("s")){ //升序 zd=SortDirection.AUTO; }else if(product.getZd().trim().equals("j")){ //降序 zd=SortDirection.REVERSE; }else{zd=SortDirection.REVERSE;} }else {zd=SortDirection.REVERSE;} CompassHits hits = queryBuilder.bool() .addMust(price) .addMust(bigkind_Id) .addMust(skind_Id) .addMust(tkind_Id) .addMust(keywords) .toQuery() .addSort(plsx,type,zd) .hits(); System.out.println("==============="+hits.toString()); //int length=product.getBeforeCount()+product.getLineSize(); int length = Math.min(hits.length(), product.getBeforeCount()+product.getLineSize()); if(length>hits.length()) length=hits.length(); /* for (CompassHit compassHit : hits) {*/ for(int i=product.getBeforeCount();i<length;i++){ System.out.println("----------"+hits.data(i).toString()+"----------"); Product_InfoBean cproduct=(Product_InfoBean)hits.data(i); //针对需要加高亮的字段先判断 String cproductName=hits.highlighter(i).fragment("product_Name"); if(cproductName!=null){cproduct.setProduct_Name(cproductName);} String cproductSName=hits.highlighter(i).fragment("product_SName"); if(cproductSName!=null){cproduct.setProduct_SName(cproductSName);} String cproductKeyWords=hits.highlighter(i).fragment("product_KeyWords"); if(cproductKeyWords!=null){cproduct.setProduct_KeyWords(cproductKeyWords);} result.add(cproduct); } long costTime = System.currentTimeMillis() - beginTime; qr.setCosttime(costTime); qr.setResultlist(result); qr.setTotalrecord(hits.length()); qr.setResultlist(result); return qr; } }); }
- compass 的多条件搜索排序加分页
- 搜索学习--Lucene中搜索的排序、范围区间搜索、分页搜索、多条件搜索
- Vue.js实践:实现多条件筛选、搜索、排序及分页的表格功能
- Vue.js实现多条件筛选、搜索、排序及分页的表格功能
- Vue.js实现多条件筛选、搜索、排序及分页的表格功能
- 【转】实现多条件筛选、搜索、排序及分页的表格功能
- Lucene+ik的分页和多条件模糊交集搜索
- Lucene+ik的分页和多条件模糊交集搜索
- laravel中带有条件搜索的分页
- laravel 5.2 的搜索加分页
- [搜索] 理解compass的配置文件
- Yii2.0 多条件搜索 带分页
- ASP.NET MVC分页【无搜索条件的分页设计】
- laravel 的 分页以及条件搜索后分页
- 分页的分页加搜索功能技术演示
- thymeleaf实现简单的条件搜索并分页搜索功能
- 分页,搜索后保留搜索条件分页
- 十二:Page分页加带过滤器的按条件查询
- 一张图就让你学会Objective_C
- ubuntu中wubi正在下载ubuntu-11.04-desktop-i386.iso
- C++编写Config类读取配置文件
- 【Android游戏开发十一】手把手让你爱上Android sdk自带“9妹”(9patch 工具),让Android游戏开发更方便!
- Matlab图像处理函数:regionprops
- compass 的多条件搜索排序加分页
- fastcam与soldworks冲突解决办法
- C++ 什么叫做离散化
- Linux VI编辑器
- 文字的纵向显示的问题
- 在GIS二次开发mapcontrol空间中对要素显示气泡弹出框(AE开发)
- 在注册表中怎样解禁Win7的桌面背景设置
- xcode 4 使用指南系列2-Interface Builder
- 获取HttpServletRequest / HttpSession / ServletContext / HttpServletResponse对象