外貿(mào)領(lǐng)航
首頁行業(yè)資訊 > 電商網(wǎng)站上的搜索功能是如何實現(xiàn)的「如何開搜索電商」

電商網(wǎng)站上的搜索功能是如何實現(xiàn)的「如何開搜索電商」

來源:互聯(lián)網(wǎng) 2024-07-23 10:04:00

今天是劉小愛自學(xué)Java的第159天。

感謝你的觀看,謝謝你。

學(xué)習(xí)計劃安排如下:

索引庫本質(zhì)上和數(shù)據(jù)庫類似,也是存儲數(shù)據(jù)的,既然如此自然也會有增刪改查。那么這個索引庫到底有何特別應(yīng)用呢?索引庫的特別之處在于它的查詢,用戶搜索一個詞語,響應(yīng)哪些對應(yīng)的數(shù)據(jù)給用戶?重點是match匹配查詢和詞條查詢。一、索引庫的增刪改查

1新增數(shù)據(jù)

①通過POST請求添加數(shù)據(jù)。

昨天我們給索引庫設(shè)定了幾個字段,以上述例子中的title字段為例,給其添加一條數(shù)據(jù)“小愛手機”,這樣后面可以通過索引庫來快速定位這條數(shù)據(jù)了。

通過響應(yīng)結(jié)果可以看到result顯示的是“created”,也就是新建了一個數(shù)據(jù)。

注意:這里的請求方式是POST,昨天關(guān)于索引庫的創(chuàng)建時POST對應(yīng)的是修改,PUT是新增,至于這兒為何是POST,暫時不清楚。

②隨機生成id

系統(tǒng)會隨機生成一個id來記錄這條新增的數(shù)據(jù),但是這個id太復(fù)雜了,不好記住。

所以在新增數(shù)據(jù)時自定義id。

2自定義id

在請求路徑中指定id即可。

關(guān)于請求路徑:索引庫是liuxiaoai01,索引類型goods,id為1,添加了一條數(shù)據(jù)。

有了id之后我們就可以去進行修改和刪除數(shù)據(jù)的操作了,如果不是系統(tǒng)隨機的id不容易記住,使用起來不方便。

3修改數(shù)據(jù)

PUT請求就是修改了,但是要注意使用PUT必須要指定id,如果沒有會報錯。

其中關(guān)于id的作用:

如果id在文檔中不存在,則新增該數(shù)據(jù),就相當(dāng)于通過POST添加了一條數(shù)據(jù)。如果id在文檔中存在,則修改對應(yīng)id數(shù)據(jù)。

也通過PUT請求既能完成新增操作又能完成修改操作,一般都會直接使用PUT。

但也要知道使用POST新增數(shù)據(jù)這回事。

3刪除數(shù)據(jù)

根據(jù)id即可刪除對應(yīng)的數(shù)據(jù)。

PS:觀察響應(yīng)結(jié)果result的值就能看出來進行了什么操作。

created對應(yīng)新增數(shù)據(jù)。update對應(yīng)修改數(shù)據(jù)。delete對應(yīng)刪除數(shù)據(jù)。

4查詢數(shù)據(jù)

同樣的方式,GET請求即對應(yīng)的查詢操作,根據(jù)id即可查詢出對應(yīng)的數(shù)據(jù)。

但是這種方法基本不會用。

要知道用戶在搜索的時候,他怎么可能知道商品對應(yīng)的id是多少?

所以用戶查詢的時候是使用不到id查詢的,就需要全文檢索技術(shù)了,

二、基本的搜索

1匹配所有(match_all)

這里query代表的就是一個查詢對象,里面編寫具體的查詢條件是怎樣的:

match_all即代表了匹配所有,也就對應(yīng)了上圖中的例子。match即匹配查詢,怎么匹配可以自行說明。term即詞條查詢,查詢的時候不考慮分詞。……除此之外,還有很多種查詢類型。

其中查詢條件根據(jù)查詢類型的不同會有多種不同的寫法,后續(xù)遇到了就說明。

現(xiàn)在主要講解下match匹配查詢和詞條查詢。

2匹配查詢(match)

為了方便測試,我向索引庫中添加了兩條數(shù)據(jù),現(xiàn)在索引庫中一共有4條數(shù)據(jù):

“小愛手機”,“大愛手機”,“超愛手機”以及“小愛電視”這4條。

match本身也就是匹配的意思,現(xiàn)在匹配和“小愛電視”相關(guān)的數(shù)據(jù)。

運行會發(fā)現(xiàn)“手機”相關(guān)的數(shù)據(jù)都被搜索出來了,這是為什么呢?

因為“小愛電視”先會被分詞成“小”“愛”以及“電視”,和分詞相關(guān)的數(shù)據(jù)都會被搜索出來。

其中響應(yīng)的結(jié)果有個score屬性,也就是得分的意思:score越高表示結(jié)果越匹配,

在電商網(wǎng)站上搜索某品牌手機,會發(fā)現(xiàn):

該品牌其它產(chǎn)品也會被搜索出來。手機殼啊什么的也會被搜索出來。

就是這么一個道理。

and關(guān)系

operator翻譯過來是運算,意思就是將分詞結(jié)果通過and連接起來。

查詢條件是“小愛電視”,但是其被分詞為了“小”,“愛”和“電視”,當(dāng)然具體是不是這樣分詞我不太清楚,但思路是一樣的:

如果不做說明默認(rèn)or連接,那么查詢到的數(shù)據(jù)的分詞只要滿足任意一個就可以。如果說明是and連接,那么查詢到的數(shù)據(jù)分詞必須要包含“小”,“愛”和“電視”。

3詞條匹配(term)

我們在通過詞條匹配查詢“小愛電視”會發(fā)現(xiàn)結(jié)果竟然一條數(shù)據(jù)都沒有。

老實說這個結(jié)果讓我很是懵逼,想了好久才明白,還不確定對不對,我大致說下:

我們在創(chuàng)建索引庫的時候,title這個字段名類型是text,它是會分詞的,并且分詞器是IK,這個昨天就詳細(xì)說明過。

所以今天往索引庫中添加數(shù)據(jù)“小愛電視”,它會被分詞成“小”、“愛”和“電視”。

索引庫中title這個字段是沒有“小愛電視”這個詞的,它被分詞了。

用match查詢時本身也會將查詢條件分詞,所以會被查詢到。而用term查詢時不會將查詢條件分詞,所以查詢不到。最后

行有不得反求諸己,我是@劉小愛

一個白天上班晚上學(xué)習(xí)的95后滬漂,不為其它,只為學(xué)會自律做好自己,也愿我的每日打卡能給你帶來勇氣,歡迎點贊關(guān)注和評論。

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如有侵權(quán)行為,請第一時間聯(lián)系我們修改或刪除,多謝。

CopyRight ? 外貿(mào)領(lǐng)航 2023 All Rights Reserved.