1. 程式人生 > >solr的多條件組合查詢和solr的範圍查詢

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


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