网站搜索功能怎么实现_电商网站上的搜索功能是如何实现的?
今天是劉小愛自學Java的第159天。
感謝你的觀看,謝謝你。
學習計劃安排如下:
- 索引庫本質上和數據庫類似,也是存儲數據的,既然如此自然也會有增刪改查。
- 那么這個索引庫到底有何特別應用呢?
- 索引庫的特別之處在于它的查詢,用戶搜索一個詞語,響應哪些對應的數據給用戶?
- 重點是match匹配查詢和詞條查詢。
一、索引庫的增刪改查
1新增數據
①通過POST請求添加數據。
昨天我們給索引庫設定了幾個字段,以上述例子中的title字段為例,給其添加一條數據“小愛手機”,這樣后面可以通過索引庫來快速定位這條數據了。
通過響應結果可以看到result顯示的是“created”,也就是新建了一個數據。
注意:這里的請求方式是POST,昨天關于索引庫的創建時POST對應的是修改,PUT是新增,至于這兒為何是POST,暫時不清楚。
②隨機生成id
系統會隨機生成一個id來記錄這條新增的數據,但是這個id太復雜了,不好記住。
所以在新增數據時自定義id。
2自定義id
在請求路徑中指定id即可。
關于請求路徑:索引庫是liuxiaoai01,索引類型goods,id為1,添加了一條數據。
有了id之后我們就可以去進行修改和刪除數據的操作了,如果不是系統隨機的id不容易記住,使用起來不方便。
3修改數據
PUT請求就是修改了,但是要注意使用PUT必須要指定id,如果沒有會報錯。
其中關于id的作用:
- 如果id在文檔中不存在,則新增該數據,就相當于通過POST添加了一條數據。
- 如果id在文檔中存在,則修改對應id數據。
也通過PUT請求既能完成新增操作又能完成修改操作,一般都會直接使用PUT。
但也要知道使用POST新增數據這回事。
3刪除數據
根據id即可刪除對應的數據。
PS:觀察響應結果result的值就能看出來進行了什么操作。
- created對應新增數據。
- update對應修改數據。
- delete對應刪除數據。
4查詢數據
同樣的方式,GET請求即對應的查詢操作,根據id即可查詢出對應的數據。
但是這種方法基本不會用。
要知道用戶在搜索的時候,他怎么可能知道商品對應的id是多少?
所以用戶查詢的時候是使用不到id查詢的,就需要全文檢索技術了,
二、基本的搜索
1匹配所有(match_all)
這里query代表的就是一個查詢對象,里面編寫具體的查詢條件是怎樣的:
- match_all即代表了匹配所有,也就對應了上圖中的例子。
- match即匹配查詢,怎么匹配可以自行說明。
- term即詞條查詢,查詢的時候不考慮分詞。
- ……除此之外,還有很多種查詢類型。
其中查詢條件根據查詢類型的不同會有多種不同的寫法,后續遇到了就說明。
現在主要講解下match匹配查詢和詞條查詢。
2匹配查詢(match)
為了方便測試,我向索引庫中添加了兩條數據,現在索引庫中一共有4條數據:
“小愛手機”,“大愛手機”,“超愛手機”以及“小愛電視”這4條。
match本身也就是匹配的意思,現在匹配和“小愛電視”相關的數據。
運行會發現“手機”相關的數據都被搜索出來了,這是為什么呢?
因為“小愛電視”先會被分詞成“小”“愛”以及“電視”,和分詞相關的數據都會被搜索出來。
其中響應的結果有個score屬性,也就是得分的意思:score越高表示結果越匹配,
在電商網站上搜索某品牌手機,會發現:
- 該品牌其它產品也會被搜索出來。
- 手機殼啊什么的也會被搜索出來。
就是這么一個道理。
and關系
operator翻譯過來是運算,意思就是將分詞結果通過and連接起來。
查詢條件是“小愛電視”,但是其被分詞為了“小”,“愛”和“電視”,當然具體是不是這樣分詞我不太清楚,但思路是一樣的:
- 如果不做說明默認or連接,那么查詢到的數據的分詞只要滿足任意一個就可以。
- 如果說明是and連接,那么查詢到的數據分詞必須要包含“小”,“愛”和“電視”。
3詞條匹配(term)
我們在通過詞條匹配查詢“小愛電視”會發現結果竟然一條數據都沒有。
老實說這個結果讓我很是懵逼,想了好久才明白,還不確定對不對,我大致說下:
我們在創建索引庫的時候,title這個字段名類型是text,它是會分詞的,并且分詞器是IK,這個昨天就詳細說明過。
所以今天往索引庫中添加數據“小愛電視”,它會被分詞成“小”、“愛”和“電視”。
索引庫中title這個字段是沒有“小愛電視”這個詞的,它被分詞了。
- 用match查詢時本身也會將查詢條件分詞,所以會被查詢到。
- 而用term查詢時不會將查詢條件分詞,所以查詢不到。
最后
行有不得反求諸己,我是@劉小愛
一個白天上班晚上學習的95后滬漂,不為其它,只為學會自律做好自己,也愿我的每日打卡能給你帶來勇氣,歡迎點贊關注和評論。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的网站搜索功能怎么实现_电商网站上的搜索功能是如何实现的?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 中文 音乐播放器,linux
- 下一篇: python开始之路—基础中的基础