]> git.deb.at Git - deb/packages.git/blobdiff - lib/Packages/Search.pm
Optimize and improve full description search by stripping away insignificant
[deb/packages.git] / lib / Packages / Search.pm
index b616f6f213de0b23392632af6b1be19ae4158810..6ae7d9722173de7bf89aa99ab37b7259d1c36b06 100644 (file)
@@ -348,7 +348,7 @@ sub read_entry_all {
        if ($opts->{h_archives}{$data[0]} && $opts->{h_suites}{$data[1]}
            && ($opts->{h_archs}{$data[2]} || $data[2] eq 'all'
                || $data[2] eq 'virtual')
-           && ($opts->{h_sections}{$data[3]} || $data[3] eq '-')) {
+           && ($opts->{h_sections}{$data[3]} || $data[3] eq 'v')) {
            debug( "Using entry ".join( ':', @data), 2);
            push @$results, [ $key, @data ];
        } else {
@@ -442,26 +442,19 @@ sub do_fulltext_search {
     my ($keyword, $file, $did2pkg, $packages, $read_entry, $opts) = @_;
     my @results;
 
+# NOTE: this needs to correspond with parse-packages!
     my @lines;
-    my $regex;
-    if ($opts->{case_bool}) {
-       if ($opts->{exact}) {
-           $regex = qr/\b\Q$keyword\E\b/o;
-       } else {
-           $regex = qr/\Q$keyword\E/o;
-       }
-    } else {
-       if ($opts->{exact}) {
-           $regex = qr/\b\Q$keyword\E\b/io;
-       } else {
-           $regex = qr/\Q$keyword\E/io;
-       }
+    $keyword =~ tr [A-Z] [a-z];
+    if ($opts->{exact}) {
+       $keyword = " $keyword ";
     }
+    $keyword =~ s/[(),.-]+//og;
+    $keyword =~ s#[^a-z0-9_/+]+# #og;
 
     open DESC, '<', "$file"
        or die "couldn't open $file: $!";
     while (<DESC>) {
-       $_ =~ $regex or next;
+       next if index $_, $keyword < 0;
        debug( "Matched line $.", 2);
        push @lines, $.;
     }