From 650a4cc3d8e7c5176d0634114b4918d59ff5171e Mon Sep 17 00:00:00 2001 From: Demian Katz <demian.katz@villanova.edu> Date: Tue, 27 Aug 2013 12:01:04 -0400 Subject: [PATCH] Allow Solr backends to use different uniqueKey values. Resolves VUFIND-877. --- .../Factory/AbstractSolrBackendFactory.php | 11 +++++++++- .../VuFindSearch/Backend/Solr/Connector.php | 21 ++++++++++++++----- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/module/VuFind/src/VuFind/Search/Factory/AbstractSolrBackendFactory.php b/module/VuFind/src/VuFind/Search/Factory/AbstractSolrBackendFactory.php index 38a2758ef12..3f395dd9799 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 d49a7d75917..e12b974dde2 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__); -- GitLab