使用solr實現電商**中商品資訊搜尋功能,可以根據關鍵字、分類、**搜尋商品資訊,也可以根據**進行排序。
在一些大型門戶**、電子商務**等都需要站內搜尋功能,使用傳統的資料庫查詢方式實現搜尋無法滿足一些高階的搜尋需求,比如:搜尋速度要快、搜尋結果按相關度排序、搜尋內容格式不固定等,這裡就需要使用全文檢索技術實現搜尋功能。
單獨使用lucene實現站內搜尋需要開發的工作量較大,主要表現在:索引維護、索引效能優化、搜尋效能優化等,因此不建議採用。
基於solr實現站內搜尋擴充套件性較好並且可以減少程式設計師的工作量,因為solr提供了較為完備的搜尋引擎解決方案,因此在門戶、論壇等系統中常用此方案。
功能:接收頁面傳遞過來的引數呼叫service查詢商品列表。將查詢結果返回給jsp頁面,還需要查詢引數的回顯。
引數:
1、查詢條件:字串
2、商品分類的過濾條件:商品的分類名稱,字串
3、商品**區間:傳遞乙個字串,滿足格式:「0-100、101-200、201-*」
4、排序條件:頁面傳遞過來乙個公升序或者降序就可以,預設是**排序。0:公升序1:降序
5、分頁資訊:每頁顯示的記錄條數建立乙個常量60條。傳遞乙個當前頁碼就可以了。
6、model:相當於request。
返回結果:string型別,就是乙個jsp的名稱。
@controller
public
class
productcontroller
}
功能:接收action傳遞過來的引數,根據引數拼裝乙個查詢條件,呼叫dao層方法,查詢商品列表。接收返回的商品列表和商品的總數量,根據每頁顯示的商品數量計算總頁數。
引數:
1、查詢條件:字串
2、商品分類的過濾條件:商品的分類名稱,字串
3、商品**區間:傳遞乙個字串,滿足格式:「0-100、101-200、201-*」
4、排序條件:頁面傳遞過來乙個公升序或者降序就可以,預設是**排序。0:公升序1:降序
5、分頁資訊:每頁顯示的記錄條數建立乙個常量60條。傳遞乙個當前頁碼就可以了。
業務邏輯:
1、根據引數建立查詢物件
2、呼叫dao執行查詢。
3、根據總記錄數計算總頁數。
返回值:resultmodel
@service
public
class
productservice
else
// 商品分類過濾if(
null
!= caltalog_name &&!""
.equals
(caltalog_name)
)// **區間過濾if(
null
!= price &&!""
.equals
(price)
)// 排序條件if(
"1".
equals
(sort)
)else
// 分頁處理
if(page ==
null
) page =1;
query.
setstart
((page -1)
* page_size)
; query.
setrows
(page_size)
;// 預設搜尋域
query.
set(
"df"
,"product_keywords");
// 設定高亮
query.
sethighlight
(true);
query.
addhighlightfield
("product_name");
query.
sethighlight******pre(""
);query.
sethighlight******post(""
);// 2、呼叫dao執行查詢。
resultmodel resultmodel = productdao.
search
(query)
;// 3、根據總記錄數計算總頁數。
long recordcount = resultmodel.
getrecordcount()
;long pagecount = recordcount / page_size;
if(recordcount % page_size >0)
resultmodel.
setpagecount((
int) pagecount)
; resultmodel.
setcurpage
(page)
;// 返回結果
return resultmodel;
}}
功能:接收service層傳遞過來的引數,根據引數查詢索引庫,返回查詢結果。
引數:solrquery物件
返回值:乙個商品列表list
,還需要返回查詢結果的總數量。
返回:resultmodel
@repository
public
class
productdao
else
productmodel.
setname
(productname)
; productmodel.
setpicture((
string
) solrdocument.
get(
"product_picture"))
; productmodel.
setprice((
float
) solrdocument.
get(
"product_price"))
;// 新增到商品列表
productlist.
add(productmodel);}
// 新增到返回結果
resultmodel.
setproductlist
(productlist)
;return resultmodel;
}}
返回值物件模型
public
class
resultmodel
public
void
setproductlist
(list
<
productmodel
>
productlist)
public
long
getrecordcount()
public
void
setrecordcount
(long recordcount)
public
intgetpagecount()
public
void
setpagecount
(int pagecount)
public
intgetcurpage()
public
void
setcurpage
(int curpage)
}
商品物件模型
public
class
productmodel
public
void
setpid
(string pid)
public
string
getname()
public
void
setname
(string name)
public
string
getcatalog_name()
public
void
setcatalog_name
(string catalog_name)
public
float
getprice()
public
void
setprice
(float price)
public
string
getdescription()
public
void
setdescription
(string description)
public
string
getpicture()
public
void
setpicture
(string picture)
}
SOLR在電商中的基本應用
略。欄位僅新增搜尋相關的字段,比如商品id 標題 品牌名稱 分類名稱,商品 上架時間,是否有貨等,注意,這裡存的字段主要是為了搜尋出商品id,在展示時建義通過搜尋到的商品id去資料庫查詢,因為有可能資料已經變更了,而solr還沒更新,比如像 是否有貨這種必須要時實查。新增好中文分詞包,並配置在需要中...
如何實現電商夢!
一提到電商,大家都在討論做 tmall 京東 等這種平台,難道電商僅此而已嗎?答案當然是否定的,現如今在 面對競爭激烈的 競爭 產品競爭。沒有強大的產品 資金支援很難做出成績.這也是我們做中小型電商困擾的問題,我想我和電商圈內的朋友都有想過一件事,那就是根據現有模式如何有效轉型到更有運營價值的模式中...
電商概述 電商分類
按模式 b2c business to consumer 商家與個人的交易行為 b2b business to business 企業與企業的行為 例子 阿里巴巴,聰慧網,或者日常生活中的批發 c2c consumer to consumer 個人向個人提供商品或者服務 c2b consumer t...