--- zoom.sql 2007/04/26 18:50:59 1 +++ zoom.sql 2007/04/26 20:21:36 3 @@ -28,6 +28,7 @@ use ZOOM; use MARC::Record; +use Encode qw/encode decode/; my $pqf = { isbn => '@attr 1=7 @attr 4=1 "%s"', @@ -51,22 +52,50 @@ $conn->option(preferredRecordSyntax => "usmarc"); -my $rs = $conn->search_pqf( q2cqf( $query ) ); +my $cqf = q2cqf( $query ); + +my $rs = $conn->search_pqf( $cqf ); my $n = $rs->size(); # fetch all results $rs->records(0, $n - 1, 0); -warn "found $n results for $query"; +warn "$n results for '$query' [$cqf]\n"; + +sub strip_non_digit { + my $d = shift; + $d =~ s/^\D+//; + $d =~ s/\D+$//; + return $d; +} + +# fix encoding +sub e { + my $t = shift; + $t =~ s/éc/è/g; + $t =~ s/âc/æ/g; + $t =~ s/éz/¾/g; + $t =~ s/és/¹/g; + $t =~ s/³/ð/g; + $t =~ s/éC/È/g; + $t =~ s/âC/Æ/g; + $t =~ s/éZ/®/g; + $t =~ s/éS/©/g; + $t =~ s/£/Ð/g; + warn "## $t\n"; +# $t = decode('iso-8859-2', $t); +# return encode('utf-8',$t); + return $t; +} foreach my $i ( 1 .. $n ) { my $marc = new_from_usmarc MARC::Record( $rs->record( $i - 1 )->raw() ); return_next({ - title => $marc->title, - author => $marc->author, - edition => $marc->edition, - date => $marc->publication_date, + title => e( $marc->title ), + author => e( $marc->author ), + edition => e( $marc->edition ), + date => strip_non_digit( $marc->publication_date ), }); } @@ -75,5 +104,11 @@ $$; -- if your terminal isn't iso-8859-2, change this! -set client_encoding = 'iso-8859-2'; +-- set client_encoding = 'iso-8859-2'; + +-- example +-- select * from search('title:djece'); +-- select * from search('osman'); +select * from search('title:mor'); +select * from search('grada');