diff --git a/module/VuFind/src/VuFind/Search/Base/Params.php b/module/VuFind/src/VuFind/Search/Base/Params.php index a25505bacd82e9de515c7f0f97832047f1e5ef03..cde0619e7542a1c4a5713a419c31952d169e38d3 100644 --- a/module/VuFind/src/VuFind/Search/Base/Params.php +++ b/module/VuFind/src/VuFind/Search/Base/Params.php @@ -449,9 +449,13 @@ class Params implements ServiceLocatorAwareInterface $this->searchType = $this->query instanceof Query ? 'basic' : 'advanced'; - // If we ended up with a basic search, set the default handler if necessary: - if ($this->searchType == 'basic' && $this->query->getHandler() === null) { - $this->query->setHandler($this->getOptions()->getDefaultHandler()); + // If we ended up with a basic search, set the default handler if necessary + // and convert it to an advanced search: + if ($this->searchType == 'basic') { + if ($this->query->getHandler() === null) { + $this->query->setHandler($this->getOptions()->getDefaultHandler()); + } + $this->convertToAdvancedSearch(); } } diff --git a/module/VuFind/src/VuFind/Search/QueryAdapter.php b/module/VuFind/src/VuFind/Search/QueryAdapter.php index 2dd5b9c8c49383ed9f4bf25fa176098df57e522f..0d4a62cc3a778163b2ed336958eee7e35830c4f3 100644 --- a/module/VuFind/src/VuFind/Search/QueryAdapter.php +++ b/module/VuFind/src/VuFind/Search/QueryAdapter.php @@ -56,7 +56,8 @@ abstract class QueryAdapter */ public static function deminify(array $search) { - if (isset($search['l'])) { + // Use array_key_exists since null is also valid + if (array_key_exists('l', $search)) { $handler = isset($search['i']) ? $search['i'] : $search['f']; return new Query( $search['l'], $handler, isset($search['o']) ? $search['o'] : null diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/QueryBuilder.php b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/QueryBuilder.php index 74ff8564bbe763ceedfdbdb6b8e2e9291f8c060e..29f228bad3b4fdc659b564714abf7cc34f35d7a9 100644 --- a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/QueryBuilder.php +++ b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/QueryBuilder.php @@ -309,9 +309,17 @@ class QueryBuilder implements QueryBuilderInterface [$this, 'reduceQueryGroupComponents'], $component->getQueries() ); $searchString = $component->isNegated() ? 'NOT ' : ''; - $searchString .= sprintf( - '(%s)', implode(" {$component->getOperator()} ", $reduced) + $reduced = array_filter( + $reduced, + function ($s) { + return '' !== $s; + } ); + if ($reduced) { + $searchString .= sprintf( + '(%s)', implode(" {$component->getOperator()} ", $reduced) + ); + } } else { $searchString = $this->getLuceneHelper() ->normalizeSearchString($component->getString()); @@ -319,7 +327,7 @@ class QueryBuilder implements QueryBuilderInterface $component->getHandler(), $searchString ); - if ($searchHandler) { + if ($searchHandler && '' !== $searchString) { $searchString = $this->createSearchString($searchString, $searchHandler); } @@ -339,6 +347,9 @@ class QueryBuilder implements QueryBuilderInterface { $advanced = $this->getLuceneHelper()->containsAdvancedLuceneSyntax($string); + if (null === $string) { + return ''; + } if ($advanced && $handler) { return $handler->createAdvancedQueryString($string); } else if ($handler) {