class SolrDocument in Search API Solr 8.2
Same name in this branch
- 8.2 src/Plugin/DataType/SolrDocument.php \Drupal\search_api_solr\Plugin\DataType\SolrDocument
- 8.2 src/Plugin/search_api/datasource/SolrDocument.php \Drupal\search_api_solr\Plugin\search_api\datasource\SolrDocument
Same name and namespace in other branches
- 8.3 src/Plugin/DataType/SolrDocument.php \Drupal\search_api_solr\Plugin\DataType\SolrDocument
- 4.x src/Plugin/DataType/SolrDocument.php \Drupal\search_api_solr\Plugin\DataType\SolrDocument
Defines the "Solr document" data type.
Instances of this class wrap Search API Item objects and allow to deal with items based upon the Typed Data API.
Plugin annotation
@DataType(
id = "solr_document",
label = @Translation("Solr document"),
description = @Translation("Records from a Solr index."),
definition_class = "\Drupal\search_api_solr\TypedData\SolrDocumentDefinition"
)
Hierarchy
- class \Drupal\Core\TypedData\TypedData implements PluginInspectionInterface, TypedDataInterface uses DependencySerializationTrait, StringTranslationTrait, TypedDataTrait
- class \Drupal\search_api_solr\Plugin\DataType\SolrDocument implements \Drupal\search_api_solr\Plugin\DataType\IteratorAggregate, ComplexDataInterface
Expanded class hierarchy of SolrDocument
File
- src/
Plugin/ DataType/ SolrDocument.php, line 25
Namespace
Drupal\search_api_solr\Plugin\DataTypeView source
class SolrDocument extends TypedData implements \IteratorAggregate, ComplexDataInterface {
/**
* The wrapped Search API Item.
*
* @var \Drupal\search_api\Item\ItemInterface|null
*/
protected $item;
/**
* Creates an instance wrapping the given Item.
*
* @param \Drupal\search_api\Item\ItemInterface|null $item
* The Item object to wrap.
*
* @return static
*/
public static function createFromItem(ItemInterface $item) {
$server_id = $item
->getIndex()
->getServerInstance()
->id();
$definition = SolrDocumentDefinition::create($server_id);
$instance = new static($definition);
$instance
->setValue($item);
return $instance;
}
/**
* {@inheritdoc}
*/
public function getValue() {
return $this->item;
}
/**
* {@inheritdoc}
*/
public function setValue($item, $notify = TRUE) {
$this->item = $item;
}
/**
* {@inheritdoc}
*/
public function get($property_name) {
if (!isset($this->item)) {
throw new MissingDataException("Unable to get Solr field {$property_name} as no item has been provided.");
}
// First, verify that this field actually exists in the Solr server. If we
// can't get a definition for it, it doesn't exist.
/** @var \Drupal\search_api_solr\Plugin\DataType\SolrField $plugin */
$plugin = \Drupal::typedDataManager()
->getDefinition('solr_field')['class'];
$field_manager = \Drupal::getContainer()
->get('solr_field.manager');
$server_id = $this->item
->getIndex()
->getServerInstance()
->id();
$fields = $field_manager
->getFieldDefinitions($server_id);
if (empty($fields[$property_name])) {
throw new \InvalidArgumentException("The Solr field {$property_name} could not be found on the {$server_id} server.");
}
// Create a new typed data object from the item's field data.
$property = $plugin::createInstance($fields[$property_name], $property_name, $this);
// Now that we have the property, try to find its values. We first look at
// the field values contained in the result item.
$found = FALSE;
foreach ($this->item
->getFields(FALSE) as $field) {
if ($field
->getDatasourceId() === 'solr_document' && $field
->getPropertyPath() === $property_name) {
$property
->setValue($field
->getValues());
$found = TRUE;
break;
}
}
if (!$found) {
// If that didn't work, maybe we can get the field from the Solr document?
$document = $this->item
->getExtraData('search_api_solr_document');
if ($document instanceof AbstractDocument && isset($document[$property_name])) {
$property
->setValue($document[$property_name]);
}
}
return $property;
}
/**
* {@inheritdoc}
*/
public function set($property_name, $value, $notify = TRUE) {
// Do nothing because we treat Solr documents as read-only.
return $this;
}
/**
* {@inheritdoc}
*/
public function getProperties($include_computed = FALSE) {
// @todo Implement this.
}
/**
* {@inheritdoc}
*/
public function toArray() {
// @todo Implement this.
}
/**
* {@inheritdoc}
*/
public function isEmpty() {
return !isset($this->item);
}
/**
* {@inheritdoc}
*/
public function onChange($name) {
// Do nothing. Unlike content entities, Items don't need to be notified of
// changes.
}
/**
* {@inheritdoc}
*/
public function getIterator() {
return isset($this->item) ? $this->item
->getIterator() : new \ArrayIterator([]);
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
SolrDocument:: |
protected | property | The wrapped Search API Item. | |
SolrDocument:: |
public static | function | Creates an instance wrapping the given Item. | |
SolrDocument:: |
public | function |
Gets a property object. Overrides ComplexDataInterface:: |
|
SolrDocument:: |
public | function | ||
SolrDocument:: |
public | function |
Gets an array of property objects. Overrides ComplexDataInterface:: |
|
SolrDocument:: |
public | function |
Gets the data value. Overrides TypedData:: |
|
SolrDocument:: |
public | function |
Determines whether the data structure is empty. Overrides ComplexDataInterface:: |
|
SolrDocument:: |
public | function |
React to changes to a child property or item. Overrides TraversableTypedDataInterface:: |
|
SolrDocument:: |
public | function |
Sets a property value. Overrides ComplexDataInterface:: |
|
SolrDocument:: |
public | function |
Sets the data value. Overrides TypedData:: |
|
SolrDocument:: |
public | function |
Returns an array of all property values. Overrides ComplexDataInterface:: |
|
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
TypedData:: |
protected | property | The data definition. | 1 |
TypedData:: |
protected | property | The property name. | |
TypedData:: |
protected | property | The parent typed data object. | |
TypedData:: |
public | function |
Applies the default value. Overrides TypedDataInterface:: |
3 |
TypedData:: |
public static | function |
Constructs a TypedData object given its definition and context. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Gets a list of validation constraints. Overrides TypedDataInterface:: |
9 |
TypedData:: |
public | function |
Gets the data definition. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Returns the name of a property or item. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Returns the parent data structure; i.e. either complex data or a list. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
|
TypedData:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
TypedData:: |
public | function |
Returns the property path of the data. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Returns the root of the typed data tree. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Returns a string representation of the data. Overrides TypedDataInterface:: |
6 |
TypedData:: |
public | function |
Sets the context of a property or item via a context aware parent. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Validates the currently set data value. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function | Constructs a TypedData object given its definition and context. | 3 |
TypedDataTrait:: |
protected | property | The typed data manager used for creating the data types. | |
TypedDataTrait:: |
public | function | Gets the typed data manager. | 2 |
TypedDataTrait:: |
public | function | Sets the typed data manager. | 2 |