From f9c27fdb530db9b6e13fc00e6cca89ea0a943ded Mon Sep 17 00:00:00 2001 From: miker Date: Mon, 5 Feb 2007 03:20:14 +0000 Subject: [PATCH] adding direct support for field-specific searches git-svn-id: svn://svn.open-ils.org/ILS/trunk@6867 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../Application/Storage/Publisher/metabib.pm | 38 ++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/metabib.pm b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/metabib.pm index 5a53366f92..5e16e9280c 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/metabib.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/metabib.pm @@ -1513,7 +1513,19 @@ sub postfilter_search_multi_class_fts { my @bonus_values; my $prev_search_class; my $curr_search_class; - for my $search_class (sort keys %{$args{searches}}) { + my $search_class; + my $search_field; + my $metabib_field; + for my $search_group (sort keys %{$args{searches}}) { + ($search_class,$search_field) = split /\|/, $search_group; + + if ($search_field) { + unless ( ($metabib_field) = config::metabib_field->search( field_class => $search_class, name => $search_field ) ) { + $log->debug("Requested class [$search_class] or field [$search_field] does not exist!", WARN); + next; + } + } + $prev_search_class = $curr_search_class if ($curr_search_class); $curr_search_class = $search_class; @@ -1561,6 +1573,11 @@ sub postfilter_search_multi_class_fts { push @rank_list,$rank; $fts_list .= " AND $fts_where AND m.source = $search_class.source"; + if ($metabib_field) { + $join_table_list .= " $curr_search_class.field = " . $metabib_field->id; + $metabib_field = undef; + } + if ($prev_search_class) { $join_table_list .= " AND $prev_search_class.source = $curr_search_class.source"; } @@ -1973,7 +1990,19 @@ sub biblio_search_multi_class_fts { my @bonus_values; my $prev_search_class; my $curr_search_class; - for my $search_class (sort keys %{$args{searches}}) { + my $search_class; + my $search_field; + my $metabib_field; + for my $search_group (sort keys %{$args{searches}}) { + ($search_class,$search_field) = split /\|/, $search_group; + + if ($search_field) { + unless ( ($metabib_field) = config::metabib_field->search( field_class => $search_class, name => $search_field ) ) { + $log->debug("Requested class [$search_class] or field [$search_field] does not exist!", WARN); + next; + } + } + $prev_search_class = $curr_search_class if ($curr_search_class); $curr_search_class = $search_class; @@ -2030,6 +2059,11 @@ sub biblio_search_multi_class_fts { push @rank_list,$rank; $fts_list .= " AND $fts_where AND b.id = $search_class.source"; + if ($metabib_field) { + $join_table_list .= " $curr_search_class.field = " . $metabib_field->id; + $metabib_field = undef; + } + if ($prev_search_class) { $join_table_list .= " AND $prev_search_class.source = $curr_search_class.source"; } -- 2.11.0