[Koha-patches] [PATCH] [SIGNED-OFF] Bug 6789: biblios with many items can result in broken search results link

Clay Fouts cfouts at liblime.com
Mon Oct 3 19:50:19 CEST 2011


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
<ruth at bywatersolutions.com>wrote:

> From: Ian Walls <ian.walls at bywatersolutions.com>
>
> 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 <ruth at bywatersolutions.com>
> ---
>  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
> Koha-patches at lists.koha-community.org
> 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/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/koha-patches/attachments/20111003/2327f3e4/attachment-0001.htm>


More information about the Koha-patches mailing list