You can avoid having to use this hack by setting and appropriately large maximumRecordSize in C4::Context::_new_Zconn() and then specifying the -k option for zebrasrv.
Clay On Mon, Oct 3, 2011 at 8:07 AM, D Ruth Bavousett <[email protected]>wrote: > From: Ian Walls <[email protected]> > > This patch fixes an issue whereby biblios with many items (often > 500) > would index, > but not the biblionumber itself, resulting in search results with a) > inaccurate item counts > and b) no biblionumber to use in the link to the details page. This is due > to Net::Z3950::ZOOM not providing > a mechanism for specifying different connection attributes; the > maximumRecordSize ZOOM connection attribute, > if not specified, defaults to 1MB, which is less than the size of a MARC > record with many, many 952 fields. Since > it is unlikely we can fix Net::Z3950::ZOOM in a timely fashion, this patch > aims to build a workaround on the Koha end. > > This patch changes EmbedItemsInMarcBiblio to use append_fields instead of > insert_ordered_fields, > so the 999$c will come before the item records. It's VERY unlikely we will > encounter more than 1MB of biblio-level MARC > content, as this would break the ISO-2709 standard by a large factor. > > To this end, it also moves the fix_biblio_ids portion of > get_corrected_marc_record out of rebuild_zebra.pl, > and makes it a part of GetMarcBiblio (right before EmbedItemsInMarcBiblio, > so the 952s still come last). fix_biblio_ids > is kept as a subroutine for the deletion portion of rebuild_zebra.pl, > which still uses it. > > It also uses the subroutine parameter in GetMarcBiblio to do the > EmbedItemsInMarcBiblio action, rather than having > rebuild_zebra.pl perform it on the itemless record returned from > GetMarcBiblio. Simpler and cleaner that way. > > To verify bug issue: > 1. Find a biblio with over 700 items (or enough that the resulting MARCXML > is greater than 1MB) > 2. search for this biblio (in a search that would return multiple results, > not just this title). You should get the title in > the results list > 3. attempt to click the link to this biblio's details page; the > biblionumber should be blank, leading to a 404 > > To test solution: > 1. Apply patch > 2. modify the biblio slightly (click the 005 for example) and save > OR manually add the biblio to zebraqueue for reindexing > 3. after rebuild_zebra.pl -z -b -x runs, use the same search as above. The > title should still appear. > 4. click the link, and find yourself on the biblio detail page as desired > > Signed-off-by: D Ruth Bavousett <[email protected]> > --- > C4/Biblio.pm | 4 ++-- > misc/migration_tools/rebuild_zebra.pl | 9 ++------- > 2 files changed, 4 insertions(+), 9 deletions(-) > > diff --git a/C4/Biblio.pm b/C4/Biblio.pm > index 915139e..6fcb022 100644 > --- a/C4/Biblio.pm > +++ b/C4/Biblio.pm > @@ -1070,9 +1070,9 @@ sub GetMarcBiblio { > if ($@) { warn " problem with :$biblionumber : $@ \n$marcxml"; } > return unless $record; > > + C4::Biblio::_koha_marc_update_bib_ids($record, '', $biblionumber, > $biblionumber); > C4::Biblio::EmbedItemsInMarcBiblio($record, $biblionumber) if > ($embeditems); > > - # $record = MARC::Record::new_from_usmarc( $marc) if $marc; > return $record; > } else { > return undef; > @@ -2730,7 +2730,7 @@ sub EmbedItemsInMarcBiblio { > my $item_marc = C4::Items::GetMarcItem($biblionumber, $itemnumber); > push @item_fields, $item_marc->field($itemtag); > } > - $marc->insert_fields_ordered(@item_fields); > + $marc->append_fields(@item_fields); > } > > =head1 INTERNAL FUNCTIONS > diff --git a/misc/migration_tools/rebuild_zebra.pl b/misc/migration_tools/ > rebuild_zebra.pl > index dadf43f..6fa6501 100755 > --- a/misc/migration_tools/rebuild_zebra.pl > +++ b/misc/migration_tools/rebuild_zebra.pl > @@ -433,10 +433,7 @@ sub get_corrected_marc_record { > > if (defined $marc) { > fix_leader($marc); > - if ($record_type eq 'biblio') { > - my $succeeded = fix_biblio_ids($marc, $record_number); > - return unless $succeeded; > - } else { > + if ($record_type eq 'authority') { > fix_authority_id($marc, $record_number); > } > if (C4::Context->preference("marcflavour") eq "UNIMARC") { > @@ -468,7 +465,7 @@ sub get_raw_marc_record { > $fetch_sth->finish(); > return unless $marc; > } else { > - eval { $marc = GetMarcBiblio($record_number); }; > + eval { $marc = GetMarcBiblio($record_number, 1); }; > if ($@ || !$marc) { > # here we do warn since catching an exception > # means that the bib was found but failed > @@ -477,8 +474,6 @@ sub get_raw_marc_record { > return; > } > } > - # ITEM > - C4::Biblio::EmbedItemsInMarcBiblio($marc, $record_number); > } else { > eval { $marc = GetAuthority($record_number); }; > if ($@) { > -- > 1.7.2.5 > > _______________________________________________ > Koha-patches mailing list > [email protected] > http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches > website : http://www.koha-community.org/ > git : http://git.koha-community.org/ > bugs : http://bugs.koha-community.org/ >
_______________________________________________ Koha-patches mailing list [email protected] http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches website : http://www.koha-community.org/ git : http://git.koha-community.org/ bugs : http://bugs.koha-community.org/
