From 12e5ee84f92f0ea0473169114c1f5489bc80aeea Mon Sep 17 00:00:00 2001 From: miker Date: Sun, 2 Jul 2006 02:51:58 +0000 Subject: [PATCH] db agnostic field weighting, take 1 git-svn-id: svn://svn.open-ils.org/ILS/trunk@4877 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/examples/fm_IDL.xml | 1 + .../OpenILS/Application/Storage/CDBI/config.pm | 2 +- .../OpenILS/Application/Storage/Publisher/metabib.pm | 10 +++++++--- Open-ILS/src/sql/Pg/002.schema.config.sql | 3 ++- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Open-ILS/examples/fm_IDL.xml b/Open-ILS/examples/fm_IDL.xml index 9967f7d5fa..7ec9cc6f33 100644 --- a/Open-ILS/examples/fm_IDL.xml +++ b/Open-ILS/examples/fm_IDL.xml @@ -335,6 +335,7 @@ + diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Storage/CDBI/config.pm b/Open-ILS/src/perlmods/OpenILS/Application/Storage/CDBI/config.pm index 9423d73364..6bc9763fd4 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Storage/CDBI/config.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Storage/CDBI/config.pm @@ -31,7 +31,7 @@ package config::metabib_field; use base qw/config/; __PACKAGE__->table('config_metabib_field'); __PACKAGE__->columns(Primary => 'id'); -__PACKAGE__->columns(Essential => qw/field_class name xpath/); +__PACKAGE__->columns(Essential => qw/field_class name xpath wieght/); #------------------------------------------------------------------------------- package config::identification_type; 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 e6d79bcf0c..36c52c1a05 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/metabib.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/metabib.pm @@ -1486,6 +1486,8 @@ sub postfilter_search_multi_class_fts { my $join_table_list = ''; my @rank_list; + my $field_table = config::metabib_field->table; + my @bonus_lists; my @bonus_values; my $prev_search_class; @@ -1511,6 +1513,7 @@ sub postfilter_search_multi_class_fts { my $REstring = '^' . join('\s+',map { lc($_) } $fts->words) . '\W*$'; my $first_word = lc(($fts->words)[0]).'%'; + $_.=" * (SELECT weight FROM $field_table WHERE $search_class.field = id)" for (@fts_ranks); my $rank = join(' + ', @fts_ranks); my %bonus = (); @@ -1896,7 +1899,6 @@ sub biblio_search_multi_class_fts { $ot_filter = ' AND ord.item_type IN ('.join(',',map{'?'}@types).')'; } - # XXX legacy format and item type support if ($args{format}) { my ($t, $f) = split '-', $args{format}; @@ -1923,6 +1925,7 @@ sub biblio_search_multi_class_fts { my $join_table_list = ''; my @rank_list; + my $field_table = config::metabib_field->table; my @bonus_lists; my @bonus_values; @@ -1949,7 +1952,8 @@ sub biblio_search_multi_class_fts { my $REstring = '^' . join('\s+',map { lc($_) } $fts->words) . '\W*$'; my $first_word = lc(($fts->words)[0]).'%'; - my $rank = join(' + ', @fts_ranks); + $_.=" * (SELECT weight FROM $field_table WHERE $search_class.field = id)" for (@fts_ranks); + my $rank = join(' + ', @fts_ranks); my %bonus = (); $bonus{'keyword'} = [ { "CASE WHEN $search_class.value ILIKE ? THEN 10 ELSE 1 END" => $SQLstring } ]; @@ -1964,7 +1968,7 @@ sub biblio_search_multi_class_fts { my $bonus_list = join ' * ', map { keys %$_ } @{ $bonus{$search_class} }; $bonus_list ||= '1'; - push @bonus_lists, $bonus_list; + push @bonus_lists, $bonus_list,; push @bonus_values, map { values %$_ } @{ $bonus{$search_class} }; #--------------------- diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql index fad77482ab..c3c4919384 100644 --- a/Open-ILS/src/sql/Pg/002.schema.config.sql +++ b/Open-ILS/src/sql/Pg/002.schema.config.sql @@ -103,7 +103,8 @@ CREATE TABLE config.metabib_field ( id SERIAL PRIMARY KEY, field_class TEXT NOT NULL CHECK (lower(field_class) IN ('title','author','subject','keyword','series')), name TEXT NOT NULL UNIQUE, - xpath TEXT NOT NULL + xpath TEXT NOT NULL, + weight INT NOT NULL DEFUALT 1, ); COMMENT ON TABLE config.metabib_field IS $$ /* -- 2.43.2