allow more control over how words are picked out of text we're indexing
authorTony Cook <tony@develop-help.com>
Mon, 18 Jan 2010 04:52:21 +0000 (04:52 +0000)
committertony <tony@45cb6cf1-00bc-42d2-bb5a-07f51df49f94>
Mon, 18 Jan 2010 04:52:21 +0000 (04:52 +0000)
site/cgi-bin/modules/BSE/Index/BSE.pm
site/docs/config.pod

index 5d42f89..31bea3a 100644 (file)
@@ -18,6 +18,8 @@ sub new {
 
   $self->{decay_multiplier} = 0.4;
 
+  $self->{wordre} = $self->{cfg}->entry("search", "wordre", "\\w+");
+
   return $self;
 }
 
@@ -45,13 +47,17 @@ sub process_article {
   $self->{weights}{$indexas} ||= {};
   for my $field (sort { $self->{scores}{$b} <=> $self->{scores}{$a} }
                 keys %$fields) {
+    my $word_re = $self->{cfg}->entry("search", "wordre_$field", $self->{wordre});
     my $text = $fields->{$field};
     my $score = $self->{scores}{$field};
     my %seen; # $seen{phrase} non-zero if seen for this field
     
     # for each paragraph
     for my $para (split /\n/, $text) {
-      my @words = split /\W+/, $para;
+      my @words;
+      while ($para =~ /($word_re)/g) {
+       push @words, $1;
+      }
       my @buffer;
       
       for my $word (@words) {
index 1434b07..5413408 100644 (file)
@@ -661,6 +661,16 @@ result excerpts.  Default: True
 If this is true then resulting articles that can't be accessed by the
 user are listed in the search results.  Default: false.
 
+=item wordre
+
+The default regular expression used to match words in text during
+indexing.  Default: \w+
+
+=item wordre_I<fieldname>
+
+The field specific word match regular expression for the built-in
+search indexer.  Default: the value of C<wordre>.
+
 =back
 
 =head2 [search highlight]