From 5ec158a015c63386dd65b31fdc3ddc7e8b6885d5 Mon Sep 17 00:00:00 2001 From: Julian Maurice Date: Wed, 6 May 2020 15:17:17 +0200 Subject: [PATCH] Bug 24555: Use 'cross_fields' type for multi_match queries It allows to search in all fields as if it were one big field. It also uses 'and' as operator, which means that all searched terms must appear at least in one field for a document to match https://www.elastic.co/guide/en/elasticsearch/reference/6.8/query-dsl-multi-match-query.html#type-cross-fields --- Koha/SearchEngine/Elasticsearch/QueryBuilder.pm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm index 50d42ec2b1..1e160aea7a 100644 --- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm +++ b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm @@ -275,6 +275,8 @@ sub _create_match_expression { my $expression = {}; unless (defined($search_param->{field})) { $expression->{multi_match} = { + type => 'cross_fields', + operator => 'and' query => $search_param->{operand}, lenient => JSON::true @@ -342,6 +344,8 @@ sub build_authorities_query { # but not "quick brown fox". push @query_parts, { multi_match => { + type => 'cross_fields', + operator => 'and' query => $val, fields => $self->_search_fields({ subfield => 'ci_raw' }), } -- 2.20.1