solr的多條件組合查詢和solr的範圍查詢

存在問題:爲了減輕數據庫的訪問壓力,往往我們將必要的數據存儲到solr中,並給部分字段建立索引,此時在查詢數據的時候可以通過solr查詢,這樣就大大的提高了查詢的效率。但是以下這個問題困擾很多初學者。包括博主我自己,那就是solr的多條件組合查詢和solr的範圍查詢,在研究多個博文和實際項目應用後發現,這個真的不是很難,只是很多博文寫的不是很詳細,很讓人頭疼。

問題分析:在多條件查詢數據庫時,我們用到將多個條件進行拼接,得到一個sql語句,然後執行sql語句到數據庫中查詢數據,在solr中也是一樣,同樣是拼接查詢語句,然後到solr中查詢數據,只是這裏不叫sql語句罷了,思想是相通的。

假設現在我要根據價格區間、類型(家居物品,遊戲點卡等)和顏色三個條件在solr中組合查詢窗簾這個商品。

代碼體現:

這裏solr的配置和solrspring的整合看我的上一篇博文“solrspring的整合配置”,接下來我就直接上代碼了。

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;
	}
}


說明:上面的代碼片段其實關鍵的地方就是價格區間的代碼,這個有時候在其他博文上看到,但是沒有給出具體代碼的體現比較抽象,這裏我就直接寫在代碼上了。

發佈了44 篇原創文章 · 獲贊 68 · 訪問量 54萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章