/[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 335 by dpavlin, Sat Dec 31 14:00:36 2005 UTC revision 511 by dpavlin, Mon May 15 17:49:01 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.08;  
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/;
21    use File::Slurp;
22    
23  =head1 NAME  =head1 NAME
24    
# Line 40  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/input_filter
46    
47  reindex just single database  reindex just single database (legacy name is --one)
48    
49    C</input_filter> is optional part which can be C<name>
50    or C<type> from input
51    
52  =item --config conf/config.yml  =item --config conf/config.yml
53    
54  path to YAML configuration file  path to YAML configuration file
55    
56    =item --force-set
57    
58    force conversion C<< normalize->path >> in C<config.yml> from
59    C<.xml> to C<.pl>
60    
61    =item --stats
62    
63    disable indexing and dump statistics about field and subfield
64    usage for each input
65    
66  =back  =back
67    
68  =cut  =cut
# Line 58  my $limit; Line 73  my $limit;
73  my $clean = 0;  my $clean = 0;
74  my $config = 'conf/config.yml';  my $config = 'conf/config.yml';
75  my $debug = 0;  my $debug = 0;
76  my $one_db_name;  my $only_filter;
77    my $force_set = 0;
78    my $stats = 0;
79    
80  GetOptions(  GetOptions(
81          "limit=i" => \$limit,          "limit=i" => \$limit,
82          "offset=i" => \$offset,          "offset=i" => \$offset,
83          "clean" => \$clean,          "clean" => \$clean,
84          "one=s" => \$one_db_name,          "one=s" => \$only_filter,
85            "only=s" => \$only_filter,
86          "config" => \$config,          "config" => \$config,
87          "debug" => \$debug,          "debug" => \$debug,
88            "force-set" => \$force_set,
89            "stats" => \$stats,
90  );  );
91    
92  $config = LoadFile($config);  $config = LoadFile($config);
# Line 75  print "config = ",Dumper($config) if ($d Line 95  print "config = ",Dumper($config) if ($d
95    
96  die "no databases in config file!\n" unless ($config->{databases});  die "no databases in config file!\n" unless ($config->{databases});
97    
98    my $log = _new WebPAC::Common()->_get_logger();
99    $log->info( "-" x 79 );
100    
101    my $use_indexer = $config->{use_indexer} || 'hyperestraier';
102    if ($stats) {
103            $log->debug("option --stats disables update of indexing engine...");
104            $use_indexer = undef;
105    } else {
106            $log->info("using $use_indexer indexing engine...");
107    }
108    
109  my $total_rows = 0;  my $total_rows = 0;
110    my $start_t = time();
111    
112  while (my ($database, $db_config) = each %{ $config->{databases} }) {  while (my ($database, $db_config) = each %{ $config->{databases} }) {
113    
114          next if ($one_db_name && $database !~ m/$one_db_name/i);          my ($only_database,$only_input) = split(m#/#, $only_filter);
115            next if ($only_database && $database !~ m/$only_database/i);
116    
117          my $log = _new WebPAC::Common()->_get_logger();          my $indexer;
118    
119          #          if ($use_indexer) {
120          # open Hyper Estraier database                  my $indexer_config = $config->{$use_indexer} || $log->logdie("can't find '$use_indexer' part in confguration");
121          #                  $indexer_config->{database} = $database;
122                    $indexer_config->{clean} = $clean;
123                    $indexer_config->{label} = $db_config->{name};
124    
125                    if ($use_indexer eq 'hyperestraier') {
126    
127                            # open Hyper Estraier database
128                            use WebPAC::Output::Estraier '0.10';
129                            $indexer = new WebPAC::Output::Estraier( %{ $indexer_config } );
130                    
131                    } elsif ($use_indexer eq 'kinosearch') {
132    
133                            # open KinoSearch
134                            use WebPAC::Output::KinoSearch;
135                            $indexer_config->{clean} = 1 unless (-e $indexer_config->{index_path});
136                            $indexer = new WebPAC::Output::KinoSearch( %{ $indexer_config } );
137    
138          my $est_config = $config->{hyperestraier} || $log->logdie("can't find 'hyperestraier' part in confguration");                  } else {
139          $est_config->{database} = $database;                          $log->logdie("unknown use_indexer: $use_indexer");
140          $est_config->{clean} = $clean;                  }
141    
142                    $log->logide("can't continue without valid indexer") unless ($indexer);
143            }
144    
         my $est = new WebPAC::Output::Estraier( %{ $est_config } );  
145    
146          #          #
147          # now WebPAC::Store          # now WebPAC::Store
# Line 102  while (my ($database, $db_config) = each Line 152  while (my ($database, $db_config) = each
152          my $db_path = $config->{webpac}->{db_path} . '/' . $database;          my $db_path = $config->{webpac}->{db_path} . '/' . $database;
153    
154          if ($clean) {          if ($clean) {
155                  $log->info("creating new database $database in $db_path");                  $log->info("creating new database '$database' in $db_path");
156                  rmtree( $db_path ) || $log->warn("can't remove $db_path: $!");                  rmtree( $db_path ) || $log->warn("can't remove $db_path: $!");
157          } else {          } else {
158                  $log->info("working on $database in $db_path");                  $log->info("working on database '$database' in $db_path");
159          }          }
160    
161          my $db = new WebPAC::Store(          my $db = new WebPAC::Store(
# Line 132  while (my ($database, $db_config) = each Line 182  while (my ($database, $db_config) = each
182    
183          foreach my $input (@inputs) {          foreach my $input (@inputs) {
184    
185                    next if ($only_input && $input->{name} =~ m#$only_input#i || $input->{type} =~ m#$only_input#i);
186    
187                  my $type = lc($input->{type});                  my $type = lc($input->{type});
188    
189                  die "I know only how to handle input types ", join(",", @supported_inputs), " not '$type'!\n" unless (grep(/$type/, @supported_inputs));                  die "I know only how to handle input types ", join(",", @supported_inputs), " not '$type'!\n" unless (grep(/$type/, @supported_inputs));
# Line 142  while (my ($database, $db_config) = each Line 194  while (my ($database, $db_config) = each
194    
195                  my $input_module = $config->{webpac}->{inputs}->{$type};                  my $input_module = $config->{webpac}->{inputs}->{$type};
196    
197                  $log->info("working on input $input->{path} [$input->{type}] using $input_module");                  $log->info("working on input '$input->{name}' in $input->{path} [type: $input->{type}] using $input_module lookup '$input->{lookup}'");
198    
199                  my $input_db = new WebPAC::Input(                  my $input_db = new WebPAC::Input(
200                          module => $input_module,                          module => $input_module,
# Line 150  while (my ($database, $db_config) = each Line 202  while (my ($database, $db_config) = each
202                          limit => $limit || $input->{limit},                          limit => $limit || $input->{limit},
203                          offset => $offset,                          offset => $offset,
204                          lookup => $lookup,                          lookup => $lookup,
205                            recode => $input->{recode},
206                            stats => $stats,
207                  );                  );
208                  $log->logdie("can't create input using $input_module") unless ($input);                  $log->logdie("can't create input using $input_module") unless ($input);
209    
# Line 166  while (my ($database, $db_config) = each Line 220  while (my ($database, $db_config) = each
220                          prefix => $input->{name},                          prefix => $input->{name},
221                  );                  );
222    
223                    my $rules;
224                  my $normalize_path = $input->{normalize}->{path};                  my $normalize_path = $input->{normalize}->{path};
225    
226                    if ($force_set) {
227                            my $new_norm_path = $normalize_path;
228                            $new_norm_path =~ s/\.xml$/.pl/;
229                            if (-e $new_norm_path) {
230                                    $log->debug("--force-set replaced $normalize_path with $new_norm_path");
231                                    $normalize_path = $new_norm_path;
232                            } else {
233                                    $log->debug("--force-set failed on $new_norm_path, fallback to $normalize_path");
234                            }
235                    }
236    
237                  if ($normalize_path =~ m/\.xml$/i) {                  if ($normalize_path =~ m/\.xml$/i) {
238                          $n->open(                          $n->open(
239                                  tag => $input->{normalize}->{tag},                                  tag => $input->{normalize}->{tag},
240                                  xml_file => $input->{normalize}->{path},                                  xml_file => $normalize_path,
241                          );                          );
242                  } elsif ($normalize_path =~ m/\.(?:yml|yaml)$/i) {                  } elsif ($normalize_path =~ m/\.(?:yml|yaml)$/i) {
243                          $n->open_yaml(                          $n->open_yaml(
244                                  path => $normalize_path,                                  path => $normalize_path,
245                                  tag => $input->{normalize}->{tag},                                  tag => $input->{normalize}->{tag},
246                          );                          );
247                    } elsif ($normalize_path =~ m/\.(?:pl)$/i) {
248                            $n = undef;
249                            $log->info("using WebPAC::Normalize::Set to process $normalize_path");
250                            $rules = read_file( $normalize_path ) or die "can't open $normalize_path: $!";
251                  }                  }
252    
253                  foreach my $pos ( 0 ... $input_db->size ) {                  foreach my $pos ( 0 ... $input_db->size ) {
# Line 192  while (my ($database, $db_config) = each Line 262  while (my ($database, $db_config) = each
262                                  push @{ $row->{'000'} }, $pos;                                  push @{ $row->{'000'} }, $pos;
263                          }                          }
264    
265                          my $ds = $n->data_structure($row);                                  
266                            my $ds;
267                            if ($n) {
268                                    $ds = $n->data_structure($row);
269                            } else {
270                                    $ds = WebPAC::Normalize::Set::data_structure(
271                                            row => $row,
272                                            rules => $rules,
273                                            lookup => $lookup->lookup_hash,
274                                    );
275    
276                                    $db->save_ds(
277                                            id => $mfn,
278                                            ds => $ds,
279                                            prefix => $input->{name},
280                                    ) if ($ds && !$stats);
281                            }
282    
283                          $est->add(                          $indexer->add(
284                                  id => $input->{name} . "/" . $mfn,                                  id => $input->{name} . "/" . $mfn,
285                                  ds => $ds,                                  ds => $ds,
286                                  type => $config->{hyperestraier}->{type},                                  type => $config->{$use_indexer}->{type},
287                          );                          ) if ($indexer);
288    
289                          $total_rows++;                          $total_rows++;
290                  }                  }
291    
292                    $log->info("statistics of fields usage:\n", $input_db->stats) if ($stats);
293    
294          };          };
295    
296          $log->info("$total_rows records indexed");          eval { $indexer->finish } if ($indexer && $indexer->can('finish'));
297    
298            my $dt = time() - $start_t;
299            $log->info("$total_rows records ", $indexer ? "indexed " : "",
300                    sprintf("in %.2f sec [%.2f rec/sec]",
301                            $dt, ($total_rows / $dt)
302                    )
303            );
304    
305          #          #
306          # add Hyper Estraier links to other databases          # add Hyper Estraier links to other databases
307          #          #
308          if (ref($db_config->{links}) eq 'ARRAY') {          if (ref($db_config->{links}) eq 'ARRAY') {
309                  foreach my $link (@{ $db_config->{links} }) {                  foreach my $link (@{ $db_config->{links} }) {
310                          $log->info("adding link $database -> $link->{to} [$link->{credit}]");                          if ($use_indexer eq 'hyperestraier') {
311                          $est->add_link(                                  $log->info("adding link $database -> $link->{to} [$link->{credit}]");
312                                  from => $database,                                  $indexer->add_link(
313                                  to => $link->{to},                                          from => $database,
314                                  credit => $link->{credit},                                          to => $link->{to},
315                          );                                          credit => $link->{credit},
316                                    );
317                            } else {
318                                    $log->warn("NOT IMPLEMENTED WITH $use_indexer: adding link $database -> $link->{to} [$link->{credit}]");
319                            }
320                  }                  }
321          }          }
322    

Legend:
Removed from v.335  
changed lines
  Added in v.511

  ViewVC Help
Powered by ViewVC 1.1.26