]> git.deb.at Git - deb/packages.git/blobdiff - lib/Packages/DoSearch.pm
Fulltext search: Greatly improve by using a more fuzzy approach
[deb/packages.git] / lib / Packages / DoSearch.pm
index 5b0b4bb5e0c31a8c25e29c57dce2fdc6c6de7554..d395a310334b787775aa078162bb739b928a8d1c 100644 (file)
@@ -79,6 +79,14 @@ sub do_search {
     if (@results) {
        my (%pkgs, %subsect, %sect, %archives, %desc, %binaries, %provided_by);
 
+       my %sort_by_relevance;
+       for (1 ... scalar @results) {
+#          debug("$results[$_][0] => $_", 4) if DEBUG;
+           $sort_by_relevance{$results[$_-1][0]} = $_;
+       }
+#      use Data::Dumper;
+#      debug( "sort_by_relevance=".Dumper(\%sort_by_relevance), 4);
+
        unless ($opts->{source}) {
            foreach (@results) {
                my ($pkg_t, $archive, $suite, $arch, $section, $subsection,
@@ -98,7 +106,12 @@ sub do_search {
            }
 
            my %uniq_pkgs = map { $_ => 1 } (keys %pkgs, keys %provided_by);
-           my @pkgs = sort keys %uniq_pkgs;
+           my @pkgs;
+           if ($searchon eq 'names') {
+               @pkgs = sort keys %uniq_pkgs;
+           } else {
+               @pkgs = sort { $sort_by_relevance{$a} <=> $sort_by_relevance{$b} } keys %uniq_pkgs;
+           }
            process_packages( $page_content, 'packages', \%pkgs, \@pkgs, $opts, \@keywords,
                              \&process_package, \%provided_by,
                              \%archives, \%sect, \%subsect,