Bug 30141 - ElasticsearchCrossFields enabled returns no search results on OPAC
Summary: ElasticsearchCrossFields enabled returns no search results on OPAC
Status: NEW
Alias: None
Product: Koha
Classification: Unclassified
Component: Searching - Elasticsearch (show other bugs)
Version: 20.05
Hardware: All All
: P5 - low normal
Assignee: Bugs List
QA Contact:
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-02-21 02:55 UTC by Aleisha Amohia
Modified: 2022-05-24 22:38 UTC (History)
3 users (show)

See Also:
Change sponsored?: ---
Patch complexity: ---
Documentation contact:
Documentation submission:
Text to go in the release notes:
Version(s) released in:
Circulation function:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Aleisha Amohia 2022-02-21 02:55:56 UTC
ElasticsearchCrossFields is a great syspref to enable if you need to search across indexes, for example your search term includes both title and author keywords.

We've discovered this only works on the staff client, and returns no results when searching on the OPAC.

After some investigation, this is because the OPAC will add a `suppress:false` to the search query, to hide records that are suppressed in OPAC. 

I'm not sure why, but this combination of suppress:false and ElasticsearchCrossFields means no results are returned in the OPAC.
Comment 1 Shi Yao Wang 2022-05-24 20:12:33 UTC
It may be due to ES boolean statements not being evaluated correctly?
Possible fix.

diff --git a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm
index dba475eb3c..5934956326 100644
--- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm
+++ b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm
@@ -306,6 +306,7 @@ sub build_query_compat {
         # them into a structured ES query itself. Maybe later, though that'd be
         # more robust.
         $search_param_query_str = join( ' ', $self->_create_query_string(@search_params) );
+        $search_param_query_str = "($search_param_query_str)";
         $query_str = join( ' AND ',
             $search_param_query_str || (),
             $self->_join_queries( $self->_convert_index_strings(@$limits) ) || () );
Comment 2 Shi Yao Wang 2022-05-24 20:30:26 UTC
Also, it may be related to https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=30152