Solr實現電商搜尋

2021-10-01 15:52:00 字數 4878 閱讀 8329

使用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...