solr的多條件組合查詢和solr的範圍查詢
阿新 • • 發佈:2019-01-02
存在問題:為了減輕資料庫的訪問壓力,往往我們將必要的資料儲存到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; } }
說明:上面的程式碼片段其實關鍵的地方就是價格區間的程式碼,這個有時候在其他博文上看到,但是沒有給出具體程式碼的體現比較抽象,這裡我就直接寫在程式碼上了。