diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/Backend.php b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/Backend.php index 6658f99708a..7b7766ad1b4 100644 --- a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/Backend.php +++ b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/Backend.php @@ -324,8 +324,8 @@ public function similar($id, ?ParamBag $params = null) $params = $params ?: new ParamBag(); $this->injectResponseWriter($params); - $params->mergeWith($this->getSimilarBuilder()->build($id)); - $response = $this->connector->similar($id, $params); + $params = $this->getSimilarBuilder()->build($id, $params); + $response = $this->connector->similar($id, $params); $collection = $this->createRecordCollection($response); $this->injectSourceIdentifier($collection); return $collection; diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/SimilarBuilder.php b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/SimilarBuilder.php index 851fcb6d81e..0556e2096df 100644 --- a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/SimilarBuilder.php +++ b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/SimilarBuilder.php @@ -113,13 +113,14 @@ public function __construct( /** * Return SOLR search parameters based on a record Id and params. * - * @param string $id Record Id + * @param string $id Record Id + * @param ?ParamBag $params Existing params * * @return ParamBag */ - public function build($id) + public function build(string $id, ?ParamBag $params = null): ParamBag { - $params = new ParamBag(); + $params = $params ?: new ParamBag(); if ($this->useHandler) { $mltParams = $this->handlerParams ? $this->handlerParams diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/SimilarBuilderInterface.php b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/SimilarBuilderInterface.php index 183015b8f40..a6231328bac 100644 --- a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/SimilarBuilderInterface.php +++ b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/SimilarBuilderInterface.php @@ -52,9 +52,10 @@ interface SimilarBuilderInterface /** * Build SOLR query based on VuFind query object. * - * @param string $id Record id + * @param string $id Record id + * @param ?ParamBag $params Existing params * * @return ParamBag */ - public function build($id); + public function build(string $id, ?ParamBag $params = null): ParamBag; } diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/SimilarBuilderTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/SimilarBuilderTest.php index 674a5ef5b6d..d084047909c 100644 --- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/SimilarBuilderTest.php +++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/SimilarBuilderTest.php @@ -32,6 +32,7 @@ namespace VuFindTest\Backend\Solr; use VuFindSearch\Backend\Solr\SimilarBuilder; +use VuFindSearch\ParamBag; /** * Unit tests for SOLR similar records query builder @@ -62,6 +63,19 @@ public function testDefaultParams() $this->assertEquals('morelikethis', $qt[0]); } + /** + * Test builder with an existing limit + * + * @return void + */ + public function testExistingLimit() + { + $sb = new SimilarBuilder(); + $response = $sb->build('testrecord', new ParamBag(['rows' => 42])); + $rows = $response->get('rows'); + $this->assertEquals(42, $rows[0]); + } + /** * Test builder with alternative id field. *