@@ -, +, @@ biblios whose items are all available, and some biblios with at least one item available and at least one item unavailable works as expected. --- Koha/SearchEngine/Elasticsearch.pm | 20 +++++++++++++++++++ .../Elasticsearch/QueryBuilder.pm | 2 +- .../searchengine/elasticsearch/mappings.yaml | 3 +++ .../data/mysql/atomicupdate/bug-25375.perl | 9 +++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 installer/data/mysql/atomicupdate/bug-25375.perl --- a/Koha/SearchEngine/Elasticsearch.pm +++ a/Koha/SearchEngine/Elasticsearch.pm @@ -707,6 +707,26 @@ sub marc_records_to_documents { $record_document->{'marc_format'} = 'base64ISO2709'; } } + + # Check if there is at least one available item + if ($self->index eq $BIBLIOS_INDEX) { + my $biblio = Koha::Biblios->find($record->field('001')->data); + my $items = $biblio->items; + my $available = 0; + while (my $item = $items->next) { + next if $item->onloan; + next if $item->notforloan; + next if $item->withdrawn; + next if $item->itemlost; + next if $item->damaged; + + $available = 1; + last; + } + + $record_document->{available} = $available ? \1 : \0; + } + push @record_documents, $record_document; } return \@record_documents; --- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm +++ a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm @@ -1010,7 +1010,7 @@ sub _fix_limit_special_cases { push @new_lim, "copydate:$date"; } elsif ( $l =~ /^available$/ ) { - push @new_lim, 'onloan:false'; + push @new_lim, 'available:true'; } else { my ( $field, $term ) = $l =~ /^\s*([\w,-]*?):(.*)/; --- a/admin/searchengine/elasticsearch/mappings.yaml +++ a/admin/searchengine/elasticsearch/mappings.yaml @@ -3110,6 +3110,9 @@ biblios: sort: 0 suggestible: '' type: boolean + available: + label: available + type: boolean other-control-number: label: other-control-number mappings: --- a/installer/data/mysql/atomicupdate/bug-25375.perl +++ a/installer/data/mysql/atomicupdate/bug-25375.perl @@ -0,0 +1,9 @@ +$DBversion = 'XXX'; +if( CheckVersion( $DBversion ) ) { + $dbh->do(qq{ + INSERT IGNORE INTO search_field (name, label, type) + VALUES ('available', 'available', 'boolean') + }); + + NewVersion( $DBversion, '25735', "Add Elasticsearch field 'available'"); +} --