X-Git-Url: http://git.indexdata.com/?p=irspy-moved-to-github.git;a=blobdiff_plain;f=bin%2Freindex.pl;h=54dfa628b853b234ece13dc0b6e68524788beac6;hp=b180026caa1ce8ae536bf463ab5c3072244a3a5a;hb=d1dd6faf3e13c8c12bc46254343b16217394f6ba;hpb=f07f520fcaffcc6a091f2272022876bbba0eac0d diff --git a/bin/reindex.pl b/bin/reindex.pl index b180026..54dfa62 100755 --- a/bin/reindex.pl +++ b/bin/reindex.pl @@ -1,18 +1,33 @@ -#!/usr/bin/perl -w +#!/usr/bin/perl + +# Run as: +# ./reindex.pl user=admin,password=SWORDFISH,localhost:8018/IR-Explain---1 +# ./reindex.pl -d -q zeerex.reliability=0 localhost:8018/IR-Explain---1 use strict; use warnings; use ZOOM; +use Getopt::Long; -if (@ARGV != 1) { - print STDERR "Usage: $0 target\n"; +my $setUdb = 0; +my $delete = 0; +my $noAction = 0; +my $query = 'cql.allRecords=1'; +if (!GetOptions( + 'setUdb' => \$setUdb, + 'delete' => \$delete, + 'noAction' => \$noAction, + 'query=s' => \$query, + ) || @ARGV != 1) { + print STDERR "Usage: $0 [-s|--setUdb] [-d|--delete] [-n|--noaction] [-q ] \n"; exit 1; } my $conn = new ZOOM::Connection($ARGV[0]); $conn->option(preferredRecordSyntax => "xml"); $conn->option(elementSetName => "zebra::data"); -my $rs = $conn->search_pqf('@attr 1=_ALLRECORDS @attr 2=103 ""'); +my $rs = $conn->search(new ZOOM::Query::CQL($query)); + my $n = $rs->size(); $| = 1; print "$0: reindexing $n records\n"; @@ -21,6 +36,16 @@ foreach my $i (1..$n) { print " $i/$n (", int($i*100/$n), "%)\n" if $i % 50 == 0; my $rec = $rs->record($i-1); my $xml = $rec->render(); + if ($xml !~ /<(e:)?databaseInfo.*?>/) { + # There is an undeletable phantom record: ignore it + next; + } + + if ($setUdb) { + my $udb = qq[irspy-$i]; + $xml =~ s/<(e:)?databaseInfo.*?>/$&$udb/; + } + update($conn, $xml); } print " $n/$n (100%)\n" if $n % 50 != 0; @@ -32,8 +57,9 @@ print "committed\n"; sub update { my($conn, $xml) = @_; + return if $noAction; my $p = $conn->package(); - $p->option(action => "specialUpdate"); + $p->option(action => $delete ? "recordDelete" : "specialUpdate"); $p->option(record => $xml); $p->send("update"); $p->destroy();