From 38ef431f48bd84ad2762c53bfff919006d0d24a6 Mon Sep 17 00:00:00 2001
From: Nick Clemens <nick@bywatersolutions.com>
Date: Mon, 28 Sep 2020 15:29:51 +0000
Subject: [PATCH] Bug 25957: Don't push blank field values to ES document
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

To test:
 1 - Load the sample DB or edit a record (using advanced cataloging editor) to have a blank subfield in a field that is indexed as suggestible
 2 - For example 'author' / 100a
     100 _ _ ‡a
 3 - Index that record into Elasticsearch 5.X:
     perl misc/search_tools/rebuild_elasticsearch.pl  -v -bn 115 -b -d
 4 - Note error 'value must have length > 0'
 5 - Edit mappings to set author 100a not suggestible
 6 - perl misc/search_tools/rebuild_elasticsearch.pl  -v -bn 115 -b -d
 7 - Success
 8 - Set field to suggestible again
 9 - Apply patch
10 - perl misc/search_tools/rebuild_elasticsearch.pl  -v -bn 115 -b -d
11 - Success!
---
 Koha/SearchEngine/Elasticsearch.pm | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/Koha/SearchEngine/Elasticsearch.pm b/Koha/SearchEngine/Elasticsearch.pm
index 1df589c07c..07b3763082 100644
--- a/Koha/SearchEngine/Elasticsearch.pm
+++ b/Koha/SearchEngine/Elasticsearch.pm
@@ -497,7 +497,7 @@ sub _process_mappings {
         next unless @{$values};
 
         if (defined $options->{property}) {
-            $values = [ map { { $options->{property} => $_ } } @{$values} ];
+            $values = [ map { { $options->{property} => $_ } if $_} @{$values} ];
         }
         if (defined $options->{nonfiling_characters_indicator}) {
             my $nonfiling_chars = $meta->{field}->indicator($options->{nonfiling_characters_indicator});
@@ -507,6 +507,8 @@ sub _process_mappings {
             $values->[0] = substr $values->[0], $nonfiling_chars;
         }
 
+        $values = [ grep(!/^$/, @{$values}) ];
+
         $record_document->{$target} //= [];
         push @{$record_document->{$target}}, @{$values};
     }
-- 
2.11.0