| 111 | | my %count; |
| 112 | | if (MT::Object->driver->can('count_group_by')) { |
| 113 | | my $iter = MT::ObjectTag->count_group_by({ |
| 114 | | blog_id => $blog_id, |
| 115 | | tag_id => \@tag_ids, |
| 116 | | object_datasource => MT::Entry->datasource, |
| 117 | | }, { |
| 118 | | group => ['object_id'], |
| 119 | | }); |
| 120 | | while (my ($count, $object_id) = $iter->()) { |
| 121 | | $count{$object_id} = $count; |
| 122 | | } |
| 123 | | } else { |
| 124 | | my $iter = MT::ObjectTag->load_iter({ |
| 125 | | blog_id => $blog_id, |
| 126 | | tag_id => \@tag_ids, |
| 127 | | object_datasource => MT::Entry->datasource, |
| 128 | | }); |
| 129 | | while (my $otag = $iter->()) { |
| 130 | | $count{$otag->object_id}++; |
| 131 | | } |
| 132 | | } |
| 133 | | delete $count{$entry_id}; |
| 134 | | |
| 135 | | my @eids = sort { $b <=> $a } keys %count; |
| 136 | | @eids = sort { $count{$b} <=> $count{$a} } @eids; |
| | 128 | my %rank; |
| | 129 | if ($weight eq 'idf') { |
| | 130 | for my $tag_id (@tag_ids) { |
| | 131 | my @otags = _object_tags($blog_id, $tag_id); |
| | 132 | next if scalar @otags == 1; |
| | 133 | my $rank = 1 / (scalar @otags - 1); |
| | 134 | for my $otag (@otags) { |
| | 135 | $rank{$otag->object_id} += $rank; |
| | 136 | } |
| | 137 | } |
| | 138 | } elsif ($weight eq 'constant') { |
| | 139 | if (MT::Object->driver->can('count_group_by')) { |
| | 140 | my $iter = MT::ObjectTag->count_group_by({ |
| | 141 | blog_id => $blog_id, |
| | 142 | tag_id => \@tag_ids, |
| | 143 | object_datasource => MT::Entry->datasource, |
| | 144 | }, { |
| | 145 | group => ['object_id'], |
| | 146 | }); |
| | 147 | while (my ($count, $object_id) = $iter->()) { |
| | 148 | $rank{$object_id} = $count; |
| | 149 | } |
| | 150 | } else { |
| | 151 | my $iter = MT::ObjectTag->load_iter({ |
| | 152 | blog_id => $blog_id, |
| | 153 | tag_id => \@tag_ids, |
| | 154 | object_datasource => MT::Entry->datasource, |
| | 155 | }); |
| | 156 | while (my $otag = $iter->()) { |
| | 157 | $rank{$otag->object_id}++; |
| | 158 | } |
| | 159 | } |
| | 160 | delete $rank{$entry_id}; |
| | 161 | } |
| | 162 | |
| | 163 | my @eids = sort { $b <=> $a } keys %rank; |
| | 164 | @eids = sort { $rank{$b} <=> $rank{$a} } @eids; |