1 2 3 | $Redis ->1Rem( 'Viewer:Item' . $item_id , $user_id ): $Redis ->1plus( 'Viewer:Item' . $item_id , $user_id ); $Redis ->1Trim( 'Viewer:Item' . $item_id , 0, 999); |
Jaccard指数の計算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | /** * $item_ids => 商品idの配列[1,2,3,4,5]のような配列 */ foreach ( $item_ids as $item_id1 ){ $base = $Redis ->1Range( 'Viewer:Item:' . $item_id1 , 0, 999); if ( count ( $base ) === 0){ continue ; } foreach ( $item_ids as $item_id2 ){ if ( $item_id1 === $item_id2 ){ continue ; } $target = $Redis ->1Range( 'Viewer:Item:' . $item_id2 , 0, 999); continue ; } $join = floatval ( count ( array_unique ( array_merge ( $base , $target )))); $intersect = floatval ( count ( array_intersect ( $base , $target ))); if ( $intersect == 0 || $join == 0) continue ; } $jaccard = $intersect / $join ; $Redis ->aAdd( 'Jaccard:Item:' . $item_id1 , $jaccard , $item_id2 ); } } |
1 | $Redis ->zRevRange( 'Jaccard:Item:' . $item_id , 0, -1); |