diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/EDS/QueryBuilder.php b/module/VuFindSearch/src/VuFindSearch/Backend/EDS/QueryBuilder.php index 79fefed753ef358425861709d79f2865087e29fb..d761481e70fc61ad5fda351856e2547008431d8c 100644 --- a/module/VuFindSearch/src/VuFindSearch/Backend/EDS/QueryBuilder.php +++ b/module/VuFindSearch/src/VuFindSearch/Backend/EDS/QueryBuilder.php @@ -44,6 +44,14 @@ use VuFindSearch\Query\QueryGroup; */ class QueryBuilder { + /** + * Default query (used when query string is empty). This should retrieve all + * records in the index, facilitating high-level facet-based browsing. + * + * @var string + */ + protected $defaultQuery = '(FT yes) OR (FT no)'; + /** * Constructor */ @@ -82,6 +90,10 @@ class QueryBuilder $expression = SearchRequestModel::escapeSpecialCharacters($expression); $fieldCode = ($query->getHandler() == 'AllFields') ? '' : $query->getHandler(); //fieldcode + // Special case: default search + if (empty($fieldCode) && empty($expression)) { + return $this->defaultQuery; + } if (!empty($fieldCode)) { $expression = $fieldCode . ':' . $expression; } diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/EDS/QueryBuilderTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/EDS/QueryBuilderTest.php index cb9377b26143a2a3b6fe379f217603547441ef92..13f3d3e9f698ed4793ede631bd4bee04af1db478 100644 --- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/EDS/QueryBuilderTest.php +++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/EDS/QueryBuilderTest.php @@ -42,6 +42,23 @@ use VuFindSearch\Backend\EDS\QueryBuilder; */ class QueryBuilderTest extends TestCase { + /** + * Test special case for blank queries. + * + * @return void + */ + public function testBlankSearch() + { + $qb = new QueryBuilder(); + $params = $qb->build(new \VuFindSearch\Query\Query()); + $this->assertEquals( + [ + 'query' => ['(FT yes) OR (FT no)'] + ], + $params->getArrayCopy() + ); + } + /** * Test query parsing. *