存在問題:爲了減輕數據庫的訪問壓力,往往我們將必要的數據存儲到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;
}
}
說明:上面的代碼片段其實關鍵的地方就是價格區間的代碼,這個有時候在其他博文上看到,但是沒有給出具體代碼的體現比較抽象,這裏我就直接寫在代碼上了。