版权声明:本文为博主原创文章,供大家参考,但不要抄袭哦!

存在问题:为了减轻数据库的访问压力,往往我们将必要的数据存储到solr中,并给部分字段建立索引,此时在查询数据的时候可以通过solr查询,这样就大大的提高了查询的效率。但是以下这个问题困扰很多初学者。包括博主我自己,那就是solr的多条件组合查询和solr的范围查询,在研究多个博文和实际项目应用后发现,这个真的不是很难,只是很多博文写的不是很详细,很让人头疼。

问题分析:在多条件查询数据库时,我们用到将多个条件进行拼接,得到一个sql语句,然后执行sql语句到数据库中查询数据,在solr中也是一样,同样是拼接查询语句,然后到solr中查询数据,只是这里不叫sql语句罢了,思想是相通的。

假设现在我要根据价格区间、类型(家居物品,游戏点卡等)和颜色三个条件在solr中组合查询窗帘这个商品。

代码体现:

这里solr的配置和solr和spring的整合看我的上一篇博文“solr和spring的整合配置”,接下来我就直接上代码了。

  1. public class ProductSearchService {
  2. //通过spring注入HttpSolrServer对象
  3. @Autowired
  4. private HttpSolrServer httpSolrServer;
  5. /**
  6. *
  7. * @描述:根据商品类型、商品颜色、价格区间组合条件到solr中查询数据
  8. * @创建人:
  9. * @创建时间:2015年11月04日 上午10:49:19
  10. * @param productType 商品的类型
  11. * @param minPrice 价格区间底价
  12. * @param maxPrice 价格区间顶价
  13. * @param color 商品的颜色
  14. * @return 查询得到的所有商品列表
  15. * @throws SolrServerException
  16. */
  17. public List<Product> queryProduct(String productType,String color, Float minPrice, Float maxPrice) throws SolrServerException {
  18. // 创建查询对象
  19. SolrQuery solrQuery = new SolrQuery();
  20. // 创建组合条件串
  21. StringBuilder params = new StringBuilder("productType:" + productType);
  22. // 组合商品颜色条件
  23. if (color != null) {
  24. params.append(" AND color:" + color);
  25. }
  26. // 组合价格区间条件
  27. if (minPrice.intValue() != 0 || maxPrice != 0) {
  28. params.append(" AND spPrice:[" + minPrice + " TO "
  29. + maxPrice + "]");
  30. }
  31. solrQuery.setQuery(params.toString());
  32. // 执行查询并获取查询数据
  33. QueryResponse queryResponse = this.httpSolrServer.query(solrQuery);
  34. List<Product> products = queryResponse.getBeans(Product.class);
  35. return products;
  36. }
  37. }

说明:上面的代码片段其实关键的地方就是价格区间的代码,这个有时候在其他博文上看到,但是没有给出具体代码的体现比较抽象,这里我就直接写在代码上了。

最新文章

  1. 后台post get请求
  2. javascript 中的借鸡生蛋
  3. ViewStub的简单用法和说明
  4. PRML读书笔记——Introduction
  5. 关于 xcode5 真机调试 的 no matching provisioning profiles found
  6. 插入排序和一点小感悟(c++版)
  7. maven小项目注册服务(二)--captcha模块
  8. Java Concurrency - ReentrantLock
  9. mysql INNODB_TRX 事务表
  10. hdu 5124
  11. POJ 2115 C Looooops(扩展欧几里得应用)
  12. 手把手教你用.NET Core写爬虫
  13. 洛谷P1608路径统计
  14. ERROR: Cannot load message class for [speech_control/command]. Are your messages built?
  15. NC 自定义项参照设置为查询条件
  16. 9. svg学习笔记-裁剪和蒙版
  17. json转换学习
  18. Solr中使用游标进行深度分页查询以提高效率(适用的场景下)
  19. jquery单行文字上下循环滚动
  20. 20135202闫佳歆--week6 进程的描述与创建--学习笔记

热门文章

  1. Xamarin.Android 记事本(一)
  2. GSON的简单示例
  3. C++ JSON解析库RapidJSON
  4. ruby hash排序
  5. G.易彰彪的一张表
  6. 怎么整合小图标,组合到一张png里面
  7. 解决post乱码之web.xml
  8. MYSQL进阶学习笔记二:MySQL存储过程和局部变量!(视频序号:进阶_4-6)
  9. html5--6-10 CSS选择器7--伪类选择器
  10. JAVASCRIPT技术 表达式验证