/[wait]/trunk/script/index_ora
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/script/index_ora

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

revision 67 by laperla, Thu Jan 24 00:40:43 2002 UTC revision 72 by laperla, Mon Jan 28 21:35:39 2002 UTC
# Line 1  Line 1 
1  #!/usr/bin/perl -w  #!/usr/bin/perl -w
2  #                              -*- Mode: Perl -*-  #                              -*- Mode: Perl -*-
3  # $Basename$  # $Basename$
4  # $Revision: 1.5 $  # $Revision: 1.9 $
5  # Author          : Ulrich Pfeifer  # Author          : Ulrich Pfeifer
6  # Created On      : Mon Dec 31 13:57:11 2001  # Created On      : Mon Dec 31 13:57:11 2001
7  # Last Modified By: Ulrich Pfeifer  # Last Modified By: Ulrich Pfeifer
# Line 11  Line 11 
11  # (C) Copyright 2001, UUNET Deutschland GmbH, Germany  # (C) Copyright 2001, UUNET Deutschland GmbH, Germany
12  #  #
13    
14    use 5.007;
15    
16  use strict;  use strict;
17    use Devel::Peek qw(Dump);
18    
19  use File::Path;  use File::Path;
20  use DB_File;  use DB_File;
21  use Getopt::Long;  use Getopt::Long;
22  use Cwd;  use Cwd;
23    
24  require WAIT::Config;  BEGIN {require WAIT::Config;}
25  require WAIT::Database;  use WAIT::Database;
26  require WAIT::Parse::Ora;  use WAIT::Parse::Ora;
27  require WAIT::Document::Ora;  use WAIT::Document::Ora;
28  require WAIT::InvertedIndex;  use WAIT::InvertedIndex;
29    
30    
31  $DB_BTREE->{'cachesize'} = 200_000 ;  $DB_BTREE->{'cachesize'} = 200_000 ;
# Line 38  GetOptions(\%OPT, Line 42  GetOptions(\%OPT,
42             'table=s',             'table=s',
43            ) || die "Usage: ...\n";            ) || die "Usage: ...\n";
44    
45  my $db;  my @localtime = localtime;
46  unless (-d "$OPT{dir}/$OPT{database}") {  $localtime[5] += 1900;
47    $db = WAIT::Database->create(name       => $OPT{database},  $localtime[4]++;
48                                'directory' => $OPT{dir})  my $jobid = sprintf "%04s-%02s-%02s_%02s:%02s_%d", @localtime[5,4,3,2,1], $$;
49      or die "Could not open database $OPT{database}: $@\n";  my $db = WAIT::Database->create(name      => "$OPT{database}-$jobid",
50  }                                  directory => $OPT{dir})
51  else {      or die "Could not create database $OPT{database}: $@\n";
   $db = WAIT::Database->open(name        => $OPT{database},  
                              'directory' => $OPT{dir})  
     or die "Could not open table $OPT{table}: $@\n";  
 }  
52    
53  my $layout = new WAIT::Parse::Ora;  my $layout = new WAIT::Parse::Ora;
54    
55  my $stem  = ['isotr', 'isolc', 'split2', 'stop', 'Stem'];  use lib "/usr/local/apache/lib";
56    use oreilly_de_catalog::wait_handler;
57    
58    my $stem  = ['OR_tr_20020124', 'OR_lc_20020124', 'split2', 'stop', 'Stem'];
59  my $text  = [{  my $text  = [{
60                'prefix'    => ['isotr', 'isolc'],                'prefix'    => ['OR_tr_20020124', 'OR_lc_20020124'],
61                'intervall' => ['isotr', 'isolc'],                'intervall' => ['OR_tr_20020124', 'OR_lc_20020124'],
62               },               },
63               'isotr', 'isolc', 'split2', 'stop'];               'OR_tr_20020124', 'OR_lc_20020124', 'split2', 'stop'];
64  my $sound = ['isotr', 'isolc', 'split2', 'Soundex'],;  my $sound = ['OR_tr_20020124', 'OR_lc_20020124', 'split2', 'Soundex'];
65    my $trigr = ['OR_lc_20020124', 'OR_trigrams_20020125'];
66    my $isbn  = ['split6', 'OR_isbn_20020127'];
67    
68  my $cwd = cwd;  my $cwd = cwd;
69    
# Line 73  my $tb = $db->create_table(name     => $ Line 78  my $tb = $db->create_table(name     => $
78                             access   => $access,                             access   => $access,
79                             invindex =>                             invindex =>
80                             [                             [
81                              'title'  => $stem,                              'title'  => $text,
82                              'about'  => $stem,                              # 'title'  => $stem,
83                              'text'   => $text,                              'aboutauthor'  => $text,
84                                # 'aboutauthor'  => $stem,
85                                'desc'   => $text,
86                                'abstract' => $text,
87                              'author' => $text,                              'author' => $text,
88                                # 'author' => $sound,
89                              'colophon' => $text,                              'colophon' => $text,
90                              'author' => $sound,                              'isbn'   => $isbn,
                             'isbn'   => $text,  
91                             ]                             ]
92                            );                            );
93  die "Couldn't create table $OPT{table}: $@\n" unless $tb;  die "Couldn't create table $OPT{table}: $@\n" unless $tb;
94    
95  my ($did, $value);  my ($did, $value);
96    binmode STDOUT, ":utf8";
97  while (($did, $value) = each %D) {  while (($did, $value) = each %D) {
98    my $record   = $layout->split($value);    my $record   = $layout->split($value);
99    my $headline = $record->{title};    my $headline = $record->{title};
# Line 95  while (($did, $value) = each %D) { Line 104  while (($did, $value) = each %D) {
104                %{$record});                %{$record});
105  }  }
106  $tb->set(top=>1);  $tb->set(top=>1);
107    
108    my $tritb = $db->create_table(
109                                  name => "$OPT{table}_fallback",
110                                  attr => [qw(docid headline)], # name
111                                                                # "headline"
112                                                                # only for
113                                                                # sman
114                                  invindex => [ headline => $trigr ],
115                                 );
116    my %dict;
117    for my $f ($tb->fields) {
118      my(@idx) = @{$tb->table->{inverted}{$f} || []};
119      for my $idx (@idx) {
120        my $name = $idx->name;
121        next if $name =~ /(_|\b)(Stem|Soundex)(\b|_)/; # irrelevant for alternatives
122        my @keys = $idx->keys;
123        @dict{@keys} = ();
124      }
125    }
126    my @dictkeys = grep s/^p//, keys %dict;
127    my $maxdebug = 5;
128    for my $headline (@dictkeys) {
129      if ($maxdebug && $headline =~ /[^\040-\177]/) {
130        Dump $headline;
131        $maxdebug--;
132      }
133      # printf "%s\n", substr($headline,0,60);
134      $tritb->insert(docid => $headline, headline => $headline);
135    }
136    $tritb->set(top=>1);
137    $tritb->close;
138  $tb->close();  $tb->close();
139  $db->close();  $db->close();
140    
141    # Now we have a new database with a very long name and we want that
142    # database to be accessible with the $OPT{database} name
143    
144    use File::Spec;
145    my $long_dir   = "$OPT{database}-$jobid";
146    my $want_dir   = File::Spec->catdir($OPT{dir}, $OPT{database});
147    my $prel_slink = File::Spec->catdir($OPT{dir}, "$OPT{database}-$$");
148    unlink $prel_slink; # may fail
149    symlink $long_dir, $prel_slink or die "Could not symlink $long_dir, $prel_slink: $!";
150    rename $prel_slink, $want_dir or die "Could not rename $prel_slink, $want_dir: $!";
151    
152    system("chmod 777 $want_dir/*/read")==0 or die;
153    
154  $WAIT::Config = $WAIT::Config; # make perl -w happy  $WAIT::Config = $WAIT::Config; # make perl -w happy
155    
156    

Legend:
Removed from v.67  
changed lines
  Added in v.72

  ViewVC Help
Powered by ViewVC 1.1.26