電商網(wǎng)站上的搜索功能是如何實(shí)現的? DATE: 2026-05-05 07:50:03
電商網(wǎng)站上的電商搜索功能(neng)是如何實(shí)現的?
學(xué)習計劃安排如下:
索引庫本質(zhì)上和數據庫類(lèi)似,也是網(wǎng)站存儲ヽ(′▽?zhuān)?ノ數據的,既然如此自然也會(huì )有增刪改查。上(shang)的搜索
那么這個(gè)索引庫到底有何ヽ(′▽?zhuān)?ノ特別應用(╯‵□′)╯呢?何實(shí)
索引庫的特別之處在于它ヽ(′ー`)ノ的查詢(xún),用戶(hù)搜索一個(gè)詞語(yǔ),電商響應哪些對應的網(wǎng)站數據給用戶(hù)?
一、上的搜索索引庫的何實(shí)增刪改查
昨天我們給??索引庫設定了幾個(gè)字段,電商(′_`)以上述例子中的網(wǎng)站title字段為例,給其添加┐(′д`)┌一條數據“小愛(ài)手機”,上的搜索這樣后面可以通ヽ(′ー`)ノ過(guò)索引庫來(lái)快速定位這條數據了。??何實(shí)
通過(guò)響應結果可以看到result顯示的電商是“created”,也就是網(wǎng)站新建了一個(gè)數據。
注意:這里的上的搜索請求方式是POST,昨天關(guān)于索引庫的創(chuàng )建時(shí)POST對應的是修改,PUT是新增,至于這兒為何是POST,暫時(shí)不清楚。
②隨機生成id
系統會(huì )隨機生成一個(gè)id來(lái)記ヽ(′ー`)ノ錄這條新(xin)增的數據,但是這個(gè)id太復雜了,不好記住。
所以在新增數據時(shí)自定ヽ(′?`)ノ義id。
2、自定義id
在請求路徑中指定id即可。
關(guān)于請求路徑:索引庫??是liuxiaoai01,索引類(lèi)型goods,id為1,添加了一條數據。
有了id之后我們就可以去進(jìn)行修改和刪除數據的操作了,如果不是系統隨機的i??d不容易記住,使用起┐(′д`)┌來(lái)不方便。
PUT請求就是修改了,但是要注意使用PUT必須要指定id,如果沒(méi)有會(huì )報錯。
其中關(guān)于id的作用:
如果id在文檔中不存在,則新增該數據,就相當于通過(guò)POST添加了一條數據。
如果id??在文檔中存在,則修改對應id數據。
也通過(guò)PUT請求既能完成新增操作又能完成修改操作,一般都會(huì )直接使用PUT。
但也要知道使用POS??T新(xin)增數據這回事。
3、刪除數據
根據id即可刪除對應的數據。
PS???:觀(guān)察響應結果result的值就能看出來(lái)進(jìn)行了什么操作。
created對應新增數據。
u??pdate對應修改數據。??
delete對應刪除數據。
4、查詢(xún)數據
同樣的方式,GET請求即對應的查詢(xún)操作,根據id即可查詢(xún)出對應的數(shu)據。
但是這種方法基本不會(huì )用。
要知道用戶(hù)在搜索的時(shí)候,他怎么可能知道商品對應的idヽ(′ー`)ノ是多少?
所以用戶(hù)查詢(xún)的時(shí)候是使用不到id查詢(xún)的,就需要全文檢索技術(shù)了,
二、基本的搜索
1、匹配所有ヽ(′▽?zhuān)?ノ(match_all)
這里query代表的就(′_`)是??一個(gè)查詢(xún)對象,里面編寫(xiě)具體的查詢(xún)條件是怎樣的:
match_all即代表了匹配所有,也就對應了上圖中的例子。
match即匹配查詢(xún),怎么匹配可(ke)以自行說(shuō)明。
term即詞條查詢(xún),查ˉ\_(ツ)_/ˉ詢(xún)的時(shí)候ヽ(′▽?zhuān)?ノ不考慮分詞。
……除此之外,還有很多種查詢(xún)類(lèi)型。
現在主要講解下match匹配查詢(xún)和詞條查詢(xún)。
2、匹配查詢(xún)(match)
為了方便(°□°)測試,我向索引庫中添加了??兩條數據,現在索引庫中一共有4條數據:
“小愛(ài)手機”,“大愛(ài)手機”,“超??愛(ài)手機”以及“小愛(ài)電視”這4條。
match本身也就是??匹配的意思,現在匹配和“小愛(ài)電視(′?`)”相關(guān)的數據。
運行會(huì )發(fā)現“手機”相關(guān)(′?`)的數據都被搜索出來(lái)了,這是為什么呢?
因為“小愛(ài)電視”先會(huì )被分詞成“小”“愛(ài)”以及“電視”,和分詞相關(guān)的數據都會(huì )被( ?▽?)搜索出來(lái)。
其中(′?`*)響應的結(jie)果有個(gè)scor??e屬性,也就是得分的意思:score越高表示結(jie)果越(yue)匹配,
在電商網(wǎng)站上搜索某品牌手機,會(huì )發(fā)現:
該品牌其它產(chǎn)品也會(huì )被??搜索出來(lái)。
手(???)機殼啊什( ?° ?? ?°)么的也會(huì )被搜索出來(lái)。
就是這么一個(gè)道理。
and關(guān)系
operator翻譯過(guò)來(lái)是運算,意思就是將(jiang)分詞結果通過(guò)and連接起來(lái)。
查詢(xún)條件是“小愛(ài)電視”,但是其被(bei)分詞為了“小”,“愛(ài)”和“電視”,當然具體是不是這樣分詞我??不太清楚,但思路是一樣的(╯‵□′)╯:
如果不做說(shuō)明默認or連接,那么查詢(xún)到的數據的分詞只要滿(mǎn)足任意一個(gè)就ヾ(′?`)?可以。
如果說(shuō)明是and連接,那么查詢(xún)到的數據分詞必須要包含“小”,“愛(ài)”和“電視”。
3、詞條匹配(term)
我們在通過(guò)詞條匹配查詢(xún)“小愛(ài)電視”會(huì )發(fā)現結ヽ(′▽?zhuān)?ノ果竟然一條數據都沒(méi)有。
老實(shí)說(shuō)這個(gè)結果讓我很是懵逼,想了好久才明白,還不確定對不對,我大致說(shuō)下:
我們在創(chuàng )建索引庫的時(shí)候,title這個(gè)字段名類(lèi)型是text,它是會(huì )分詞的,并且分詞器是IK,這個(gè)昨天就詳細說(shuō)明過(guò)。
所以今天往索引庫中添加數據“小愛(ài)電視”,它會(huì )被分詞成“??小”、“愛(ài)”和“電視”。
索引庫中title這個(gè)字段是沒(méi)有“小愛(ài)電視”這個(gè)詞的,它被分詞了。
用match查詢(xún)時(shí)本身也會(huì )將查詢(xún)條件分詞,所以會(huì )被(bei)查詢(xún)到。
而用term查詢(xún)時(shí)不會(huì )將查詢(xún)條??件分詞,所以查詢(xún)不到。

