From aba0d9eb4d84c5a19b8681c831116586a6a6419d Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Wed, 19 Feb 2020 15:50:02 -0500 Subject: [PATCH] LP1844418 Direct indexing experiment WIP Signed-off-by: Bill Erickson --- .../eg2/src/app/share/catalog/elastic.service.ts | 2 +- .../src/perlmods/lib/OpenILS/Elastic/BibSearch.pm | 6 ++- .../perlmods/lib/OpenILS/Elastic/BibSearch/XSLT.pm | 49 +++++++++------------- 3 files changed, 25 insertions(+), 32 deletions(-) diff --git a/Open-ILS/src/eg2/src/app/share/catalog/elastic.service.ts b/Open-ILS/src/eg2/src/app/share/catalog/elastic.service.ts index 903dd0c48a..e20e984bb6 100644 --- a/Open-ILS/src/eg2/src/app/share/catalog/elastic.service.ts +++ b/Open-ILS/src/eg2/src/app/share/catalog/elastic.service.ts @@ -128,7 +128,7 @@ export class ElasticService { ts.facetFilters.forEach(f => { if (f.facetValue !== '') { rootNode.filter(new TermQuery( - `${f.facetClass}|${f.facetName}.facet`, f.facetValue)); + `${f.facetClass}|${f.facetName}|facet`, f.facetValue)); } }); diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Elastic/BibSearch.pm b/Open-ILS/src/perlmods/lib/OpenILS/Elastic/BibSearch.pm index 46c6918175..e96949c327 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Elastic/BibSearch.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Elastic/BibSearch.pm @@ -368,8 +368,10 @@ sub create_index { $self->es->indices->put_mapping({ index => $index_name, type => 'record', - #body => {dynamic => 'strict', properties => {$field => $properties->{$field}}} - body => {properties => {$field => $properties->{$field}}} + body => { + dynamic => 'strict', + properties => {$field => $properties->{$field}} + } }); }; diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Elastic/BibSearch/XSLT.pm b/Open-ILS/src/perlmods/lib/OpenILS/Elastic/BibSearch/XSLT.pm index 8f70a054ff..b6c6fb799e 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Elastic/BibSearch/XSLT.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Elastic/BibSearch/XSLT.pm @@ -116,34 +116,18 @@ sub get_dynamic_fields { @seen_fields = (); # reset with each run - my $doc = $self->xsl_doc; - - for my $node ($doc->findnodes('//xsl:call-template[@name="add_search_entry"]')) { - my $class = $node->findnodes('./xsl:with-param[@name="field_class"]/text()'); - my $name = $node->findnodes('./xsl:with-param[@name="index_name"]/text()'); - my $weight = $node->findnodes('./xsl:with-param[@name="weight"]/text()'); - $self->add_dynamic_field($fields, 'search', "$class", "$name", "$weight"); - } - - for my $node ($doc->findnodes('//xsl:call-template[@name="add_facet_entry"]')) { - my $class = $node->findnodes('./xsl:with-param[@name="field_class"]/text()'); - my $name = $node->findnodes('./xsl:with-param[@name="index_name"]/text()'); - $self->add_dynamic_field($fields, 'facet', "$class", "$name"); - } - - for my $node ($doc->findnodes('//xsl:call-template[@name="add_filter_entry"]')) { - my $name = $node->findnodes('./xsl:with-param[@name="name"]/text()'); - $self->add_dynamic_field($fields, 'filter', undef, "$name"); - } - - for my $node ($doc->findnodes('//xsl:call-template[@name="add_composite_filter_entry"]')) { - my $name = $node->findnodes('./xsl:with-param[@name="name"]/text()'); - $self->add_dynamic_field($fields, 'filter', undef, "$name"); - } - - for my $node ($doc->findnodes('//xsl:call-template[@name="add_sorter_entry"]')) { - my $name = $node->findnodes('./xsl:with-param[@name="name"]/text()'); - $self->add_dynamic_field($fields, 'sorter', undef, "$name"); + my $null_doc = XML::LibXML->load_xml(string => ''); + my $result = $self->xsl_sheet->transform($null_doc, index_defs_only => '1'); + my $output = $self->xsl_sheet->output_as_chars($result); + + my @rows = split(/\n/, $output); + for my $row (@rows) { + my @parts = split(/ /, $row); + if ($parts[0] eq 'search' || $parts[0] eq 'facet') { + $self->add_dynamic_field($fields, @parts); + } else { + $self->add_dynamic_field($fields, $parts[0], undef, $parts[1]); + } } return $fields; @@ -156,8 +140,15 @@ sub get_bib_data { my $db_data = $self->get_bib_db_data($record_ids); for my $db_rec (@$db_data) { + + if ($db_rec->{deleted} == 1) { + # No need to extract index values. + push(@$bib_data, {deleted => 1}); + next; + } + my $marc_doc = XML::LibXML->load_xml(string => $db_rec->{marc}); - my $result = $self->xsl_sheet->transform($marc_doc); + my $result = $self->xsl_sheet->transform($marc_doc, index_defs_only => 'false'); my $output = $self->xsl_sheet->output_as_chars($result); my @rows = split(/\n/, $output); -- 2.11.0