@@ -, +, @@ Elasticsearch --- Koha/SearchEngine/Elasticsearch/QueryBuilder.pm | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) --- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm +++ a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm @@ -83,6 +83,7 @@ sub build_query { my $fuzzy_enabled = C4::Context->preference("QueryFuzzy") || 0; $query = '*' unless defined $query; + $query = $self->_truncate_terms($query) if ( $auto_truncation ); my $res; $res->{query} = { @@ -779,4 +780,27 @@ sub _sort_field { return $f; } +=head2 _truncate_terms + + my $query = $self->_truncate_terms($query); + +Given a string query this function appends '*' wildcard to all terms except +operands. + +=cut + +sub _truncate_terms { + my ($self, $query) = @_; + my @stops = qw/and or not/; + my @new_terms; + my @split_query = split /[\(\s\)]/, $query ; + foreach my $term ( @split_query ) { + next if ($term eq '' || $term eq ' ' ) ; + $term .= "*" unless ( ( grep { $term =~ /$_/ } @stops ) || ($term =~ /\*$/ ) ); + push @new_terms, $term; + } + $query=join ' ' ,@new_terms; + return $query; +} + 1; --