Fixed bug in pre-ranking algorithm

Change-Id: I9ae430129859fd0e48ca55713243c71c87b238a2
diff --git a/lib/Krawfish/Index/Fields/Direction.pm b/lib/Krawfish/Index/Fields/Direction.pm
index fa999c4..91e38e3 100644
--- a/lib/Krawfish/Index/Fields/Direction.pm
+++ b/lib/Krawfish/Index/Fields/Direction.pm
@@ -3,6 +3,8 @@
 use strict;
 use warnings;
 
+use constant DEBUG => 1;
+
 sub new {
   my $class = shift;
   my $list = shift;
@@ -11,6 +13,14 @@
 
 sub rank_for {
   my ($self, $doc_id) = @_;
+
+  if (DEBUG) {
+    print_log(
+      'f_rank_dir',
+      'Get rank for doc ' . $doc_id . ' which is ' . $self->[$doc_id]
+    );
+  };
+
   return $self->[$doc_id] // 0;
 };
 
diff --git a/lib/Krawfish/Index/Fields/Rank.pm b/lib/Krawfish/Index/Fields/Rank.pm
index 7b7e97f..4dcca72 100644
--- a/lib/Krawfish/Index/Fields/Rank.pm
+++ b/lib/Krawfish/Index/Fields/Rank.pm
@@ -43,7 +43,7 @@
   my ($value, $doc_id) = @_;
 
   if (DEBUG) {
-    print_log('f_rank', qq!Add value "$value" associated to ! . $doc_id)
+    print_log('f_rank', qq!Add value "$value" associated to $doc_id!)
   };
 
   # Collation is numerical
@@ -85,29 +85,46 @@
   if (DEBUG) {
     print_log(
       'f_rank',
-      'Presorted list is ' .
+      'Presorted list [VALUE,DOC] is ' .
         join('', map { '[' . join(',',@$_) . ']' } @presort)
       );
   };
 
-  # Remove duplicates
-  my @sort;
-  my $last_value;
-  foreach my $next (@presort) {
-    if ($last_value && $next->[0] eq $last_value) {
-      push @{$sort[-1]}, $next->[1]
-    }
-    else {
-      push @sort, [$next->[1]];
-      $last_value = $next->[1];
-    };
-  };
-
-
   # This list keeps existing, even
   # when the segment becomes static -
   # to make merging possible without the
   # need to reconsult the dictionary
+
+  # Remove duplicates
+  my @sort;
+  my $last_value;
+
+  # Iterate over presort list
+  foreach my $next (@presort) {
+
+    # The last value is given and it's equal to the next value
+    if (defined $last_value && ($next->[0] eq $last_value)) {
+
+      # Add to the last added list
+      push @{$sort[-1]}, $next->[1]
+    }
+    else {
+
+      # Create new item
+      push @sort, [$next->[1]];
+      $last_value = $next->[0];
+    };
+  };
+
+  if (DEBUG) {
+    print_log(
+      'f_rank',
+      'Sorted list on ranks [DOC*] is ' .
+        join('', map { '[' . join(',',@$_) . ']' } @sort)
+      );
+  };
+
+
   $self->{sorted} = \@sort;
 
   # Create the ascending rank
@@ -127,6 +144,14 @@
     $rank++;
   };
 
+  if (DEBUG) {
+    print_log(
+      'f_rank',
+      'Ascending ranks per doc are ' .
+        join('', map { "[${_}]" } @asc)
+      );
+  };
+
   $self->{asc} = Krawfish::Index::Fields::Direction->new(\@asc);
 
   # Max rank is relevant for efficient encoding