protected function SolrFieldManager::buildFieldDefinitions in Search API Solr 8.2
Same name and namespace in other branches
- 8.3 src/SolrFieldManager.php \Drupal\search_api_solr\SolrFieldManager::buildFieldDefinitions()
- 4.x src/SolrFieldManager.php \Drupal\search_api_solr\SolrFieldManager::buildFieldDefinitions()
Builds the field definitions for a Solr server from its Luke handler.
Parameters
\Drupal\search_api\ServerInterface $server: The server from which we are retrieving field information.
Return value
\Drupal\search_api_solr\TypedData\SolrFieldDefinitionInterface[] The array of field definitions for the server, keyed by field name.
Throws
\InvalidArgumentException
1 call to SolrFieldManager::buildFieldDefinitions()
- SolrFieldManager::getFieldDefinitions in src/
SolrFieldManager.php - Gets the field definitions for a Solr server.
File
- src/
SolrFieldManager.php, line 95
Class
- SolrFieldManager
- Manages the discovery of Solr fields.
Namespace
Drupal\search_api_solrCode
protected function buildFieldDefinitions(ServerInterface $server) {
$backend = $server
->getBackend();
if (!$backend instanceof SolrBackendInterface) {
throw new \InvalidArgumentException("The Search API server's backend must be an instance of SolrBackendInterface.");
}
$fields = [];
try {
$luke = $backend
->getSolrConnector()
->getLuke();
foreach ($luke['fields'] as $name => $definition) {
$field = new SolrFieldDefinition($definition);
$label = Unicode::ucfirst(trim(str_replace('_', ' ', $name)));
$field
->setLabel($label);
// The Search API can't deal with arbitrary item types. To make things
// easier, just use one of those known to the Search API.
if (strpos($field
->getDataType(), 'text') !== FALSE) {
$field
->setDataType('search_api_text');
}
elseif (strpos($field
->getDataType(), 'date') !== FALSE) {
$field
->setDataType('timestamp');
}
elseif (strpos($field
->getDataType(), 'int') !== FALSE) {
$field
->setDataType('integer');
}
elseif (strpos($field
->getDataType(), 'long') !== FALSE) {
$field
->setDataType('integer');
}
elseif (strpos($field
->getDataType(), 'float') !== FALSE) {
$field
->setDataType('float');
}
elseif (strpos($field
->getDataType(), 'double') !== FALSE) {
$field
->setDataType('float');
}
elseif (strpos($field
->getDataType(), 'bool') !== FALSE) {
$field
->setDataType('boolean');
}
else {
$field
->setDataType('string');
}
$fields[$name] = $field;
}
} catch (SearchApiSolrException $e) {
$this
->getLogger()
->error('Could not connect to server %server, %message', [
'%server' => $server
->id(),
'%message' => $e
->getMessage(),
]);
}
return $fields;
}