Bug 23521: Put parentheses arround limit terms
authorAlex Arnaud <alex.arnaud@biblibre.com>
Thu, 29 Aug 2019 15:06:14 +0000 (15:06 +0000)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Mon, 16 Mar 2020 10:24:34 +0000 (10:24 +0000)
Test plan:
  - Use Elasticsearch 6 (you'll need Bug 18969),
  - create a biblio (#1) with "Dillinger Girl" in author and what you
    want in title,
  - create another biblio (#2) with the word "girl" in the title and
    "Dillinger Escaplan" as author
  - reindex
  - search * and refine on "Dillinger Girl"
  - Ko => Biblio #1 and #2 appear
  - Apply this patch,
  - search * and refine on "Dillinger Girl"
  - Ok => anly biblio #1 appears
  - use Elasticsearch 5 again
  - check for no search regression

Signed-off-by: Séverine QUEUNE <severine.queune@bulac.fr>
Signed-off-by: Séverine QUEUNE <severine.queune@bulac.fr>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Ere Maijala <ere.maijala@helsinki.fi>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Koha/SearchEngine/Elasticsearch/QueryBuilder.pm
t/db_dependent/Koha/SearchEngine/Elasticsearch/QueryBuilder.t

index c1011ec..2b8db7e 100644 (file)
@@ -1007,7 +1007,13 @@ sub _fix_limit_special_cases {
             push @new_lim, 'onloan:false';
         }
         else {
-            push @new_lim, $l;
+            my ( $field, $term ) = $l =~ /^\s*([\w,-]*?):(.*)/;
+            if ( defined($field) && defined($term) ) {
+                push @new_lim, "$field:($term)";
+            }
+            else {
+                push @new_lim, $l;
+            }
         }
     }
     return \@new_lim;
index 2295dc8..c996f7c 100644 (file)
@@ -222,7 +222,7 @@ subtest 'build_authorities_query_compat() tests' => sub {
 };
 
 subtest 'build_query tests' => sub {
-    plan tests => 48;
+    plan tests => 50;
 
     my $qb;
 
@@ -467,6 +467,20 @@ subtest 'build_query tests' => sub {
         '(title:"donald duck")',
         "query of specific field is not added AND suppress:0"
     );
+
+    ( undef, $query ) = $qb->build_query_compat( ['AND'], ['title:"donald duck"'], undef, ['author:Dillinger Escaplan'] );
+    is(
+        $query->{query}{query_string}{query},
+        '(title:"donald duck") AND author:(Dillinger Escaplan)',
+        "Simplle query with limit's term in parentheses"
+    );
+
+    ( undef, $query ) = $qb->build_query_compat( ['AND'], ['title:"donald duck"'], undef, ['author:Dillinger Escaplan', 'itype:BOOK'] );
+    is(
+        $query->{query}{query_string}{query},
+        '(title:"donald duck") AND (author:(Dillinger Escaplan)) AND (itype:(BOOK))',
+        "Simplle query with each limit's term in parentheses"
+    );
     is($query_cgi, 'idx=&q=title%3A%22donald%20duck%22', 'query cgi');
     is($query_desc, 'title:"donald duck"', 'query desc ok');