--- tags: Redis --- # Ch7. Search-based applications ## 7.1 Searching in Redis * indexing * inverted indexing: 搜尋哪些文檔包含哪些字 -> 建立以字為key,文檔為value的set/zset * 一些常見的文字處理方法: tokenization、刪除停用詞 * searching * 基礎: ```sinter``` ```sinterstore``` * 同義字: ```sunion``` ```sunionstore``` * 排除關鍵字: ```sdiff``` ```sdiffstore``` * sorting: 搜尋結果排序 * ```sort``` ## 7.2 Sorted indexes * 文章搜索,按照時間排的同時也要按照有用程度排 * 使用```zset``` ```zinterstore``` ```zunionstore```等 * 取交集,並設置權重得到最後的排序 * 如果想用不是數字的方式sorted: 把文字先轉成數字 ## 7.3 Ad targeting * 廣告服務商需要找到最適合的廣告顯示給web使用者 * 可以利用7.1、7.2的內容設計這樣的服務 * 包含 * 建立廣告的index: 1. 以location為key、以廣告包含的單字為key 2. 紀錄廣告的平均點擊次數/動作執行次數(dict) 3. 紀錄廣告的價值(基本價格與估計每千次價格eCPM) 4. 記錄能搜到廣告的關鍵字 * 根據使用者的location篩選廣告: 找eCPM最高的廣告 1. match location: 找廣告 ```union``` 2. finish scoring: 計算符合的廣告的eCPM ```zintersetstore```、根據廣告與網頁的單字符合程度,決定eCPM要再加上多少 ```zunionstore``` 3. record targeting result: 選擇完廣告之後,紀錄結果 1. 記錄每種廣告的展示次數 ```incr``` 2. 紀錄廣告及廣告單字的展示訊息(某個廣告被target到的次數、單字被用來計算eCPM附加值的總次數) ```zincrby``` 3. 廣告每展示每100次重新計算eCPM * 紀錄廣告被點擊的次數 1. 紀錄次數 ```incr``` 2. 記錄廣告中含有的單字 ```zincrby``` * 更新eCPM附加值 1. 拿到廣告的類型、價格、包含的單字 2. 拿到廣告的展示次數跟被點擊次數 3. 計算eCPM並更新廣告價格 4. 計算單字的eCPM,單字eCPM - 廣告eCPM = 單字附加值 ## 7.4 Job search * 另一個例子.搜尋用戶所擁有的技能和工作所需技能的匹配程度 * ```sadd```用戶所擁有的技能、```sadd```工作所需技能、```sdiff```兩者,如果都一樣,代表職位適合用戶 * 另一種思考方式 * 建立以技能為index的set * zset:記錄每個工作所需的技能數 * ```zunion```建立求職者的技能set * ```zinterset```:權重:對每個工作的得分=-1、工作所需技能數目=1 * 算出 = 0即為符合的工作
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up