(二)基於商品屬性的相似商品推薦算法——Flink SQL實時計算實現商品的隱式評分


系列隨筆:

(總覽)基於商品屬性的相似商品推薦算法

(一)基於商品屬性的相似商品推薦算法——整體框架及處理流程

(二)基於商品屬性的相似商品推薦算法——Flink SQL實時計算實現商品的隱式評分

(三)基於商品屬性的相似商品推薦算法——批量處理商品屬性,得到屬性前綴及完整屬性字符串

(四)基於商品屬性的相似商品推薦算法——推薦與評分高的商品屬性相似的商品

(五)基於商品屬性的相似商品推薦算法——算法調優及其他

 

 

2020.04.15  補充:協同過濾推薦算法.pptx

 

提取碼:4tds

 

 

注:如果你沒有使用日志埋點和實時計算(接口直接累計也是可行的),你可以直接跳到這一節~

 

Flink SQL實時計算實現商品的隱匿評分


 

一、導入log service日志源表

 

二、導入評分配置維度表(用戶行為的評分配置)

 

三、導入用戶商品評分維表

 

四、用戶評分結果表

 

四、預處理日志數據

-- 處理日志數據
CREATE VIEW probe_log0_view AS
SELECT
    t1.cid,
    CAST(memberCode as INT) as memberCode,
    t1.event,
    t1.eventApp,
    TO_TIMESTAMP(CAST(CAST(__timestamp__ as DOUBLE) as BIGINT)*1000) as eventTime,
    CAST(IF (SUBSTRING(t1.eventProps,0,1)='%', REGEXP_EXTRACT(t1.eventProps, concat(t2.code_name,'\\%22:(\\d+),'), 1), JSON_VALUE (t1.eventProps, concat('$.',t2.code_name))) as INT) as goodsCode,
    t2.score
FROM
    probe_log0 t1
    LEFT JOIN rc_config_dimension FOR SYSTEM_TIME AS OF PROCTIME() AS t2
    ON t1.event=t2.event AND t2.status=1
WHERE
    t1.event IN ('viewGoods','shareGoods','collectGoods','addToCart');

注:eventProps為埋點的擴展json數據,因為小程序的埋點不太規范,所以加了額外的判斷;正常來說,直接使用 JSON_VALUE 函數即可

 

五、寫入結果表

-- 入庫
INSERT INTO rc_member_goods
    (member_code,
    cid,
    goods_code,
    score,
    update_time)
SELECT
    t1.memberCode,
    t1.cid,
    t1.goodsCode,
    CAST(IF(t2.score IS NOT NULL, t2.score, 0) + SUM(t1.score) as INT) AS score,
    MAX(t1.eventTime) as update_time
FROM
    probe_log0_view t1
    LEFT JOIN rc_member_goods_dimension FOR SYSTEM_TIME AS OF PROCTIME() AS t2
    ON t1.memberCode=t2.member_code AND t1.cid=t2.cid AND t1.goodsCode=t2.goods_code
WHERE
    t1.goodsCode IS NOT NULL
    AND (t1.eventTime > t2.update_time OR t2.update_time IS NULL)
GROUP BY
    t1.memberCode,
    t1.cid,
    t1.goodsCode,
    t2.score;

注:這里的難點在於 CAST(IF(t2.score IS NOT NULL, t2.score, 0) + SUM(t1.score) as INT) AS score 和 AND (t1.eventTime > t2.update_time OR t2.update_time IS NULL) 

意思是:如果rc_member_goods表中沒有記錄的,就直接加入;如果 rc_member_goods 中有記錄的,則判斷 eventTime 是否大於 上前的更新時間(防止重復更新),最后累計上當前的日志分

 

PS:如果沒有 t2.update_time IS NULL 則左連接會變成 left outer join

 

上一節:(一)基於商品屬性的相似商品推薦算法——整體框架及處理流程

下一節:(三)基於商品屬性的相似商品推薦算法——批量處理商品屬性,得到屬性前綴及完整屬性字符串

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM