add match all option to searching
authorTony Cook <tony@develop-help.com>
Thu, 27 Apr 2006 04:34:51 +0000 (04:34 +0000)
committertony <tony@45cb6cf1-00bc-42d2-bb5a-07f51df49f94>
Thu, 27 Apr 2006 04:34:51 +0000 (04:34 +0000)
sort articles with the same search score by title

site/cgi-bin/modules/BSE/Search/BSE.pm
site/cgi-bin/search.pl
site/docs/bse.pod
site/templates/search_base.tmpl

index fc96c31..64b5a7e 100644 (file)
@@ -51,7 +51,7 @@ sub get_term_matches {
 }
 
 sub search {
-  my ($self, $words, $section, $date, $terms, $req) = @_;
+  my ($self, $words, $section, $date, $terms, $match_all, $req) = @_;
 
   # canonical form
   $words =~ s/^\s+|\s+$//g;
@@ -88,6 +88,12 @@ sub search {
   
   @terms or return;
 
+  if ($match_all) {
+    for my $term (@terms) {
+      $term->[2] = 1;
+    }
+  }
+
   # if the user entered a plain multi-word phrase
   if ($words !~ /["'+-]/ && $words =~ /\s/) {
     # treat it as if they entered it in quotes as well
@@ -170,6 +176,8 @@ sub search {
        };
   }
 
+  $sql .= " order by title";
+
   my $dh = BSE::DB->single;
 
   my $sth = $dh->{dbh}->prepare($sql)
index d9fc705..0a1d98f 100755 (executable)
@@ -23,6 +23,7 @@ my $cgi = $req->cgi;
 my $words = $cgi->param('q');
 my $section = $cgi->param('s');
 my $date = $cgi->param('d');
+my $match_all = $cgi->param('match_all');
 $section = '' if !defined $section;
 $date = 'ar' if ! defined $date;
 my @results;
@@ -30,7 +31,7 @@ my @terms; # terms as parsed by the search engine
 my $case_sensitive;
 if (defined $words && length $words) {
   $case_sensitive = $words ne lc $words;
-  @results = getSearchResult($words, $section, $date, \@terms);
+  @results = getSearchResult($words, $section, $date, \@terms, $match_all);
 }
 else { 
   $words = ''; # so we don't return junk for the form default
@@ -258,13 +259,13 @@ BSE::Template->show_page('search', $cfg, \%acts);
 undef $req;
 
 sub getSearchResult {
-  my ($words, $section, $date, $terms) = @_;
+  my ($words, $section, $date, $terms, $match_all) = @_;
 
   my $searcher_class = $cfg->entry('search', 'searcher', 'BSE::Search::BSE');
   (my $searcher_file = $searcher_class . '.pm') =~ s!::!/!g;;
   require $searcher_file;
   my $searcher = $searcher_class->new(cfg => $cfg);
-  return $searcher->search($words, $section, $date, $terms, $req);
+  return $searcher->search($words, $section, $date, $terms, $match_all, $req);
 }
 
 
index c4b955b..f9994c7 100644 (file)
@@ -10,6 +10,20 @@ Maybe I'll add some other bits here.
 
 =head1 CHANGES
 
+=head2 0.15_37
+
+=over
+
+=item *
+
+add match all option to searching
+
+=item *
+
+sort articles with the same search score by title
+
+=back
+
 =head2 0.15_36
 
 =over
index bd907ec..cb6ceb8 100644 (file)
           <option value="e7" <:dateSelected e7:>>Archived within last 7 days</option>
           <option value="e30" <:dateSelected e30:>>Archived within last 30 days</option>
           <option value="ae" <:dateSelected ae:>>Archives</option>
-        </select>
+        </select></font>
       </td>
     </tr>
+    <tr>
+      <td colspan="2"></td>
+      <td><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><input type="checkbox" name="match_all" value="1" <:ifCgi match_all:>checked="checked"<:or:><:eif:> /><b> Match all terms</b></font></td>
+    </tr>
   </table>
 </form>
 <:if Search:> <: if Results:>