optional case-insensitivity for searching
[bse.git] / site / cgi-bin / modules / BSE / Index.pm
index 31753ea..fccc28e 100644 (file)
@@ -2,9 +2,9 @@ package BSE::Index;
 use strict;
 use Time::HiRes qw(time);
 use Constants qw(@SEARCH_EXCLUDE @SEARCH_INCLUDE);
-use Articles;
+use BSE::TB::Articles;
 
-our $VERSION = "1.003";
+our $VERSION = "1.007";
 
 my %default_scores =
   (
@@ -46,12 +46,16 @@ sub indexer {
     my $indexer_class = $cfg->entry('search', 'indexer', 'BSE::Index::BSE');
     (my $indexer_file = $indexer_class . ".pm") =~ s!::!/!g;
     require $indexer_file;
+    my $case_sensitivity = $cfg->entry('search', 'case_sensitive', 'context');
+    $case_sensitivity =~ /^(none|context|controlled)$/
+      or die "[search].case_sensitive must be none, context or controlled\n";
 
     $self->{indexer} = $indexer_class->new
       (
        cfg => $cfg,
        scores => $self->{scores},
        verbose => $self->{verbose},
+       case => $case_sensitivity,
       );
   }
 
@@ -86,7 +90,7 @@ sub make_index {
   @dont_search{@SEARCH_EXCLUDE} = @SEARCH_EXCLUDE;
   @do_search{@SEARCH_INCLUDE} = @SEARCH_INCLUDE;
   $self->vnote("s::Loading article ids");
-  my @ids = Articles->allids;
+  my @ids = BSE::TB::Articles->allids;
   my $count = @ids;
   $self->vnote("c:$count:$count articles to index");
   my $cfg = BSE::Cfg->single;
@@ -96,18 +100,12 @@ sub make_index {
     my @files;
     my $got_files;
     # find the section
-    my $article = Articles->getByPkey($id);
+    my $article = BSE::TB::Articles->getByPkey($id);
     next unless $article;
-    next unless ($article->{listed} || $article->{flags} =~ /I/);
-    next unless $article->is_linked;
-    next if $article->{flags} =~ /[CN]/;
-    my $section = $article;
-    while ($section->{parentid} >= 1) {
-      $section = Articles->getByPkey($section->{parentid});
-      next INDEX if $section->{flags} =~ /C/;
-    }
+    next unless $article->should_index;
+    my $section = $article->section;
     my $id = $article->{id};
-    my $indexas = $article->{level} > $self->{max_level} ? $article->{parentid} : $id;
+    my $indexas = $article->indexed_as;
     my $sectionid = $section->{id};
     eval "use $article->{generator}";
     $@ and die $@;
@@ -144,7 +142,7 @@ sub make_index {
       }
       #next if $text =~ m!^\<html\>!i; # I don't know how to do this (yet)
       if ($field eq 'body') {
-       $gen->remove_block("Articles", [], \$text);
+       $gen->remove_block("BSE::TB::Articles", [], \$text);
        $text =~ s/[abi]\[([^\]]+)\]/$1/g;
       }
 
@@ -152,7 +150,7 @@ sub make_index {
 
       $fields{$field} = $text;
     }
-    $indexer->process_article($article, $section, $indexas, \%fields);
+    $indexer->process_article($article, $section, $indexas->id, \%fields);
   }
   $self->vnote("f::Article scan complete");
 }