solr的多条件组合查询和solr的范围查询
2015-11-05 10:11
393 查看
存在问题:为了减轻数据库的访问压力,往往我们将必要的数据存储到solr中,并给部分字段建立索引,此时在查询数据的时候可以通过solr查询,这样就大大的提高了查询的效率。但是以下这个问题困扰很多初学者。包括博主我自己,那就是solr的多条件组合查询和solr的范围查询,在研究多个博文和实际项目应用后发现,这个真的不是很难,只是很多博文写的不是很详细,很让人头疼。
问题分析:在多条件查询数据库时,我们用到将多个条件进行拼接,得到一个sql语句,然后执行sql语句到数据库中查询数据,在solr中也是一样,同样是拼接查询语句,然后到solr中查询数据,只是这里不叫sql语句罢了,思想是相通的。
假设现在我要根据价格区间、类型(家居物品,游戏点卡等)和颜色三个条件在solr中组合查询窗帘这个商品。
代码体现:
这里solr的配置和solr和spring的整合看我的上一篇博文“solr和spring的整合配置”,接下来我就直接上代码了。
public class ProductSearchService {
//通过spring注入HttpSolrServer对象
@Autowired
private HttpSolrServer httpSolrServer;
/**
*
* @描述:根据商品类型、商品颜色、价格区间组合条件到solr中查询数据
* @创建人:
* @创建时间:2015年11月04日 上午10:49:19
* @param productType 商品的类型
* @param minPrice 价格区间底价
* @param maxPrice 价格区间顶价
* @param color 商品的颜色
* @return 查询得到的所有商品列表
* @throws SolrServerException
*/
public List<Product> queryProduct(String productType,String color, Float minPrice, Float maxPrice) throws SolrServerException {
// 创建查询对象
SolrQuery solrQuery = new SolrQuery();
// 创建组合条件串
StringBuilder params = new StringBuilder("productType:" + productType);
// 组合商品颜色条件
if (color != null) {
params.append(" AND color:" + color);
}
// 组合价格区间条件
if (minPrice.intValue() != 0 || maxPrice != 0) {
params.append(" AND spPrice:[" + minPrice + " TO "
+ maxPrice + "]");
}
solrQuery.setQuery(params.toString());
// 执行查询并获取查询数据
QueryResponse queryResponse = this.httpSolrServer.query(solrQuery);
List<Product> products = queryResponse.getBeans(Product.class);
return products;
}
}
说明:上面的代码片段其实关键的地方就是价格区间的代码,这个有时候在其他博文上看到,但是没有给出具体代码的体现比较抽象,这里我就直接写在代码上了。
问题分析:在多条件查询数据库时,我们用到将多个条件进行拼接,得到一个sql语句,然后执行sql语句到数据库中查询数据,在solr中也是一样,同样是拼接查询语句,然后到solr中查询数据,只是这里不叫sql语句罢了,思想是相通的。
假设现在我要根据价格区间、类型(家居物品,游戏点卡等)和颜色三个条件在solr中组合查询窗帘这个商品。
代码体现:
这里solr的配置和solr和spring的整合看我的上一篇博文“solr和spring的整合配置”,接下来我就直接上代码了。
public class ProductSearchService {
//通过spring注入HttpSolrServer对象
@Autowired
private HttpSolrServer httpSolrServer;
/**
*
* @描述:根据商品类型、商品颜色、价格区间组合条件到solr中查询数据
* @创建人:
* @创建时间:2015年11月04日 上午10:49:19
* @param productType 商品的类型
* @param minPrice 价格区间底价
* @param maxPrice 价格区间顶价
* @param color 商品的颜色
* @return 查询得到的所有商品列表
* @throws SolrServerException
*/
public List<Product> queryProduct(String productType,String color, Float minPrice, Float maxPrice) throws SolrServerException {
// 创建查询对象
SolrQuery solrQuery = new SolrQuery();
// 创建组合条件串
StringBuilder params = new StringBuilder("productType:" + productType);
// 组合商品颜色条件
if (color != null) {
params.append(" AND color:" + color);
}
// 组合价格区间条件
if (minPrice.intValue() != 0 || maxPrice != 0) {
params.append(" AND spPrice:[" + minPrice + " TO "
+ maxPrice + "]");
}
solrQuery.setQuery(params.toString());
// 执行查询并获取查询数据
QueryResponse queryResponse = this.httpSolrServer.query(solrQuery);
List<Product> products = queryResponse.getBeans(Product.class);
return products;
}
}
说明:上面的代码片段其实关键的地方就是价格区间的代码,这个有时候在其他博文上看到,但是没有给出具体代码的体现比较抽象,这里我就直接写在代码上了。
相关文章推荐
- hibernate持久化对象解析2(一对多)
- 二分查找思想
- GCD
- The 6 inspectors in XCode
- hiho 1015 KMP
- 二分查找思想
- [LeetCode]57. Binary Tree Inorder Traversal中序遍历二叉树
- 总结概括对于大数据、高并发的网站如何进行优化的问题
- JS实现的新浪微博大厅文字内容滚动效果代码
- 手机热销了,余承东没想到(批注版)
- ios About the Virtual Memory System
- z-blog总结
- 手把手教你最简单的开源项目托管GitHub入门教程
- [Servlet]微博应用程序(2):会话管理
- NSOperation
- 地税系统WEB打印提示未注册
- 设计模式
- nginx负载均衡基于ip_hash的session粘帖
- Apache配置虚拟目录和多主机头
- Express 用express.static访问静态文件