/[webpac2]/trunk/run.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/run.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 401 by dpavlin, Sun Feb 19 16:36:42 2006 UTC revision 492 by dpavlin, Sun May 14 13:25:36 2006 UTC
# Line 12  use WebPAC::Lookup; Line 12  use WebPAC::Lookup;
12  use WebPAC::Input 0.03;  use WebPAC::Input 0.03;
13  use WebPAC::Store 0.03;  use WebPAC::Store 0.03;
14  use WebPAC::Normalize::XML;  use WebPAC::Normalize::XML;
15    use WebPAC::Normalize::Set;
16  use WebPAC::Output::TT;  use WebPAC::Output::TT;
 use WebPAC::Output::Estraier '0.10';  
17  use YAML qw/LoadFile/;  use YAML qw/LoadFile/;
18  use Getopt::Long;  use Getopt::Long;
19  use File::Path;  use File::Path;
20  use Time::HiRes qw/time/;  use Time::HiRes qw/time/;
21    use File::Slurp;
22    
23  =head1 NAME  =head1 NAME
24    
# Line 41  limit loading to 100 records Line 42  limit loading to 100 records
42    
43  remove database and Hyper Estraier index before indexing  remove database and Hyper Estraier index before indexing
44    
45  =item --one=database_name  =item --only=database_name
46    
47  reindex just single database  reindex just single database (legacy name is --one)
48    
49  =item --config conf/config.yml  =item --config conf/config.yml
50    
51  path to YAML configuration file  path to YAML configuration file
52    
53    =item --force-set
54    
55    force conversion C<normalize->path> in C<config.yml> from
56    C<.xml> to C<.pl>
57    
58  =back  =back
59    
60  =cut  =cut
# Line 59  my $limit; Line 65  my $limit;
65  my $clean = 0;  my $clean = 0;
66  my $config = 'conf/config.yml';  my $config = 'conf/config.yml';
67  my $debug = 0;  my $debug = 0;
68  my $one_db_name;  my $only_db_name;
69    my $force_set = 0;
70    
71  GetOptions(  GetOptions(
72          "limit=i" => \$limit,          "limit=i" => \$limit,
73          "offset=i" => \$offset,          "offset=i" => \$offset,
74          "clean" => \$clean,          "clean" => \$clean,
75          "one=s" => \$one_db_name,          "one=s" => \$only_db_name,
76            "only=s" => \$only_db_name,
77          "config" => \$config,          "config" => \$config,
78          "debug" => \$debug,          "debug" => \$debug,
79            "force-set" => \$force_set,
80  );  );
81    
82  $config = LoadFile($config);  $config = LoadFile($config);
# Line 76  print "config = ",Dumper($config) if ($d Line 85  print "config = ",Dumper($config) if ($d
85    
86  die "no databases in config file!\n" unless ($config->{databases});  die "no databases in config file!\n" unless ($config->{databases});
87    
88    my $log = _new WebPAC::Common()->_get_logger();
89    
90    my $use_indexer = $config->{use_indexer} || 'hyperestraier';
91    $log->info("using $use_indexer indexing engine...");
92    
93  my $total_rows = 0;  my $total_rows = 0;
94  my $start_t = time();  my $start_t = time();
95    
96  while (my ($database, $db_config) = each %{ $config->{databases} }) {  while (my ($database, $db_config) = each %{ $config->{databases} }) {
97    
98          next if ($one_db_name && $database !~ m/$one_db_name/i);          next if ($only_db_name && $database !~ m/$only_db_name/i);
99    
100          my $log = _new WebPAC::Common()->_get_logger();          my $indexer;
101    
102          #          my $indexer_config = $config->{$use_indexer} || $log->logdie("can't find '$use_indexer' part in confguration");
103          # open Hyper Estraier database          $indexer_config->{database} = $database;
104          #          $indexer_config->{clean} = $clean;
105            $indexer_config->{label} = $db_config->{name};
106    
107            # important: clean database just once!
108            $clean = 0;
109    
110            if ($use_indexer eq 'hyperestraier') {
111    
112                    # open Hyper Estraier database
113                    use WebPAC::Output::Estraier '0.10';
114                    $indexer = new WebPAC::Output::Estraier( %{ $indexer_config } );
115            
116            } elsif ($use_indexer eq 'kinosearch') {
117    
118                    # open KinoSearch
119                    use WebPAC::Output::KinoSearch;
120                    $indexer_config->{clean} = 1 unless (-e $indexer_config->{index_path});
121                    $indexer = new WebPAC::Output::KinoSearch( %{ $indexer_config } );
122    
123          my $est_config = $config->{hyperestraier} || $log->logdie("can't find 'hyperestraier' part in confguration");          } else {
124          $est_config->{database} = $database;                  $log->logdie("unknown use_indexer: $use_indexer");
125          $est_config->{clean} = $clean;          }
         $est_config->{label} = $db_config->{name};  
126    
127          my $est = new WebPAC::Output::Estraier( %{ $est_config } );          $log->logide("can't continue without valid indexer") unless ($indexer);
128    
129          #          #
130          # now WebPAC::Store          # now WebPAC::Store
# Line 153  while (my ($database, $db_config) = each Line 183  while (my ($database, $db_config) = each
183                          limit => $limit || $input->{limit},                          limit => $limit || $input->{limit},
184                          offset => $offset,                          offset => $offset,
185                          lookup => $lookup,                          lookup => $lookup,
186                            recode => $input->{recode},
187                  );                  );
188                  $log->logdie("can't create input using $input_module") unless ($input);                  $log->logdie("can't create input using $input_module") unless ($input);
189    
# Line 169  while (my ($database, $db_config) = each Line 200  while (my ($database, $db_config) = each
200                          prefix => $input->{name},                          prefix => $input->{name},
201                  );                  );
202    
203                    my $rules;
204                  my $normalize_path = $input->{normalize}->{path};                  my $normalize_path = $input->{normalize}->{path};
205    
206                    if ($force_set) {
207                            my $new_norm_path = $normalize_path;
208                            $new_norm_path =~ s/\.xml$/.pl/;
209                            if (-e $new_norm_path) {
210                                    $log->info("--force-set replaced $normalize_path with $new_norm_path");
211                                    $normalize_path = $new_norm_path;
212                            } else {
213                                    $log->warn("--force-set failed on $new_norm_path, fallback to $normalize_path");
214                            }
215                    }
216    
217                  if ($normalize_path =~ m/\.xml$/i) {                  if ($normalize_path =~ m/\.xml$/i) {
218                          $n->open(                          $n->open(
219                                  tag => $input->{normalize}->{tag},                                  tag => $input->{normalize}->{tag},
220                                  xml_file => $input->{normalize}->{path},                                  xml_file => $normalize_path,
221                          );                          );
222                  } elsif ($normalize_path =~ m/\.(?:yml|yaml)$/i) {                  } elsif ($normalize_path =~ m/\.(?:yml|yaml)$/i) {
223                          $n->open_yaml(                          $n->open_yaml(
224                                  path => $normalize_path,                                  path => $normalize_path,
225                                  tag => $input->{normalize}->{tag},                                  tag => $input->{normalize}->{tag},
226                          );                          );
227                    } elsif ($normalize_path =~ m/\.(?:pl)$/i) {
228                            $n = undef;
229                            $log->info("using WebPAC::Normalize::Set to process $normalize_path");
230                            $rules = read_file( $normalize_path ) or die "can't open $normalize_path: $!";
231                  }                  }
232    
233                  foreach my $pos ( 0 ... $input_db->size ) {                  foreach my $pos ( 0 ... $input_db->size ) {
# Line 195  while (my ($database, $db_config) = each Line 242  while (my ($database, $db_config) = each
242                                  push @{ $row->{'000'} }, $pos;                                  push @{ $row->{'000'} }, $pos;
243                          }                          }
244    
245                          my $ds = $n->data_structure($row);                          my $ds = $n ? $n->data_structure($row) :
246                                    WebPAC::Normalize::Set::data_structure(
247                                            row => $row,
248                                            rules => $rules,
249                                            lookup => $lookup->lookup_hash,
250                                    );
251    
252                          $est->add(                          $indexer->add(
253                                  id => $input->{name} . "/" . $mfn,                                  id => $input->{name} . "/" . $mfn,
254                                  ds => $ds,                                  ds => $ds,
255                                  type => $config->{hyperestraier}->{type},                                  type => $config->{$use_indexer}->{type},
256                          );                          );
257    
258                          $total_rows++;                          $total_rows++;
# Line 208  while (my ($database, $db_config) = each Line 260  while (my ($database, $db_config) = each
260    
261          };          };
262    
263            eval { $indexer->finish } if ($indexer->can('finish'));
264    
265          my $dt = time() - $start_t;          my $dt = time() - $start_t;
266          $log->info("$total_rows records indexed in " .          $log->info("$total_rows records indexed in " .
267                  sprintf("%.2f sec [%.2f rec/sec]",                  sprintf("%.2f sec [%.2f rec/sec]",
# Line 220  while (my ($database, $db_config) = each Line 274  while (my ($database, $db_config) = each
274          #          #
275          if (ref($db_config->{links}) eq 'ARRAY') {          if (ref($db_config->{links}) eq 'ARRAY') {
276                  foreach my $link (@{ $db_config->{links} }) {                  foreach my $link (@{ $db_config->{links} }) {
277                          $log->info("adding link $database -> $link->{to} [$link->{credit}]");                          if ($use_indexer eq 'hyperestraier') {
278                          $est->add_link(                                  $log->info("adding link $database -> $link->{to} [$link->{credit}]");
279                                  from => $database,                                  $indexer->add_link(
280                                  to => $link->{to},                                          from => $database,
281                                  credit => $link->{credit},                                          to => $link->{to},
282                          );                                          credit => $link->{credit},
283                                    );
284                            } else {
285                                    $log->warn("NOT IMPLEMENTED WITH $use_indexer: adding link $database -> $link->{to} [$link->{credit}]");
286                            }
287                  }                  }
288          }          }
289    

Legend:
Removed from v.401  
changed lines
  Added in v.492

  ViewVC Help
Powered by ViewVC 1.1.26