diff --git a/module/VuFind/src/VuFind/Search/Factory/AbstractSolrBackendFactory.php b/module/VuFind/src/VuFind/Search/Factory/AbstractSolrBackendFactory.php index 38a2758ef12f9323ac22f48f9d588fcce14a069e..3f395dd97999d56dab4a67b7681bb8ede26a718e 100644 --- a/module/VuFind/src/VuFind/Search/Factory/AbstractSolrBackendFactory.php +++ b/module/VuFind/src/VuFind/Search/Factory/AbstractSolrBackendFactory.php @@ -97,6 +97,13 @@ abstract class AbstractSolrBackendFactory implements FactoryInterface */ protected $solrCore = ''; + /** + * Solr field used to store unique identifiers + * + * @var string + */ + protected $uniqueKey = 'id'; + /** * Constructor */ @@ -254,7 +261,9 @@ abstract class AbstractSolrBackendFactory implements FactoryInterface } } - $connector = new Connector($this->getSolrUrl(), new HandlerMap($handlers)); + $connector = new Connector( + $this->getSolrUrl(), new HandlerMap($handlers), $this->uniqueKey + ); $connector->setTimeout( isset($config->Index->timeout) ? $config->Index->timeout : 30 ); diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/Connector.php b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/Connector.php index d49a7d7591774a059817977594ad0fa9fe7909ed..e12b974dde2f10f421b7f8f680a346b9e61884bd 100644 --- a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/Connector.php +++ b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/Connector.php @@ -95,6 +95,13 @@ class Connector */ protected $map; + /** + * Solr field used to store unique identifier + * + * @var string + */ + protected $uniqueKey; + /** * HTTP read timeout. * @@ -121,15 +128,17 @@ class Connector /** * Constructor * - * @param string $url SOLR base URL - * @param HandlerMap $map Handler map + * @param string $url SOLR base URL + * @param HandlerMap $map Handler map + * @param string $uniqueKey Solr field used to store unique identifier * * @return void */ - public function __construct($url, HandlerMap $map) + public function __construct($url, HandlerMap $map, $uniqueKey = 'id') { $this->url = $url; $this->map = $map; + $this->uniqueKey = $uniqueKey; } /// Public API @@ -165,7 +174,8 @@ class Connector public function retrieve($id, ParamBag $params = null) { $params = $params ?: new ParamBag(); - $params->set('q', sprintf('id:"%s"', addcslashes($id, '"'))); + $params + ->set('q', sprintf('%s:"%s"', $this->uniqueKey, addcslashes($id, '"'))); $handler = $this->map->getHandler(__FUNCTION__); $this->map->prepare(__FUNCTION__, $params); @@ -186,7 +196,8 @@ class Connector public function similar($id, ParamBag $params = null) { $params = $params ?: new ParamBag(); - $params->set('q', sprintf('id:"%s"', addcslashes($id, '"'))); + $params + ->set('q', sprintf('%s:"%s"', $this->uniqueKey, addcslashes($id, '"'))); $params->set('qt', 'morelikethis'); $handler = $this->map->getHandler(__FUNCTION__);