the search indexer now uses configured scores
authorTony Cook <tony@develop-help.com>
Thu, 8 Mar 2012 04:32:00 +0000 (15:32 +1100)
committerTony Cook <tony@develop-help.com>
Thu, 8 Mar 2012 04:32:00 +0000 (15:32 +1100)
Changes.txt
site/cgi-bin/modules/BSE/Index.pm

index 6541da88573da2c39824a466c2680efc17fb6840..b4550677a147878279c3cafe0be5503ec01aa52c 100644 (file)
@@ -1,6 +1,12 @@
 BSE 0.22 - unreleased
 ========
 
+Bug fixes:
+
+ - the search index builder was ignoring configured field scores.
+
+Enhancements:
+
  - automatic image insertion can now be disabled globally or on a
    per-article basis.
    https://rt4.develop-help.com/Ticket/Display.html?id=1331
index 02ab299d3427de60bfa8a53049e048ea25cd0bd6..a25af2339372b3133c4469c1baddea3e1a0a7a59 100644 (file)
@@ -4,9 +4,9 @@ use Time::HiRes qw(time);
 use Constants qw($BASEDIR $MAXPHRASE $DATADIR @SEARCH_EXCLUDE @SEARCH_INCLUDE $SEARCH_LEVEL);
 use Articles;
 
-our $VERSION = "1.000";
+our $VERSION = "1.001";
 
-my %scores =
+my %default_scores =
   (
    title=>5,
    body=>3,
@@ -24,7 +24,14 @@ my %scores =
 sub new {
   my ($class, %opts) = @_;
 
-  $opts{scores} ||= \%scores;
+  unless ($opts{scores}) {
+    my $scores = { %default_scores };
+    my $cfg = BSE::Cfg->single;
+    for my $field (keys %$scores) {
+      $scores->{$field} = $cfg->entry("search index scores", $field, $scores->{$field});
+    }
+    $opts{scores} = $scores;
+  }
   $opts{start} = time;
   $opts{max_level} ||= $SEARCH_LEVEL;
 
@@ -119,9 +126,10 @@ sub make_index {
     $self->vnote("i:$id:Indexing '$article->{title}'");
 
     my %fields;
-    for my $field (sort { $scores{$b} <=> $scores{$a} } keys %scores) {
+    my $scores = $self->{scores};
+    for my $field (sort { $scores->{$b} <=> $scores->{$a} } keys %$scores) {
 
-      next unless $scores{$field};
+      next unless $self->{scores}{$field};
       # strip out markup
       my $text;
       if (exists $article->{$field}) {