zoukankan      html  css  js  c++  java
  • solr的多条件组合查询和solr的范围查询【转】

     

    solr的多条件组合查询和solr的范围查询

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

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

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

    代码体现:

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

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

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

  • 相关阅读:
    C#多线程学习笔记(三)——线程池
    html解析工具
    怎么样获取手机的主题
    我改进的《豆瓣搜》前后对比及源代码
    【收藏】Silverlight Style (二) 自定义样式在后台代码中应用
    C#多线程学习笔记(一)
    学习Linux——学习正确的思考方式(转)
    电信禁路由上网的破解方法
    印度软件业
    中国与印度软件工程师之比较
  • 原文地址:https://www.cnblogs.com/Lxiaojiang/p/6442071.html
Copyright © 2011-2022 走看看