You are here

public function SolrFieldType::getDynamicFields in Search API Solr 8.2

Same name and namespace in other branches
  1. 8.3 src/Entity/SolrFieldType.php \Drupal\search_api_solr\Entity\SolrFieldType::getDynamicFields()
  2. 4.x src/Entity/SolrFieldType.php \Drupal\search_api_solr\Entity\SolrFieldType::getDynamicFields()

Gets a list of dynamic Solr fields that will use this Solr Field Type.

Parameters

bool $multilingual:

Return value

array

Overrides SolrFieldTypeInterface::getDynamicFields

File

src/Entity/SolrFieldType.php, line 327

Class

SolrFieldType
Defines the SolrFieldType entity.

Namespace

Drupal\search_api_solr\Entity

Code

public function getDynamicFields($multilingual = FALSE) {
  $dynamic_fields = [];
  $prefixes = $this->custom_code ? [
    'tc' . $this->custom_code,
    'toc' . $this->custom_code,
  ] : [
    't',
    'to',
  ];
  foreach ($prefixes as $prefix_without_cardinality) {
    foreach ([
      's',
      'm',
    ] as $cardinality) {
      if ($multilingual || $this->custom_code) {
        $prefix = $prefix_without_cardinality . $cardinality;
        $name = $multilingual ? Utility::getLanguageSpecificSolrDynamicFieldPrefix($prefix, $this->field_type_language_code) : $prefix . '_';
        $dynamic_fields[] = $dynamic_field = [
          'name' => SearchApiSolrUtility::encodeSolrName($name) . '*',
          'type' => $this->field_type['name'],
          'stored' => TRUE,
          'indexed' => TRUE,
          'multiValued' => 'm' === $cardinality,
          'termVectors' => TRUE,
          'omitNorms' => strpos($prefix, 'to') === 0,
        ];
        if ($multilingual && $this->custom_code && 'und' == $this->field_type_language_code) {

          // Add a language-unspecific default dynamic field for that custom code.
          $dynamic_field['name'] = SearchApiSolrUtility::encodeSolrName($prefix) . '_*';
          $dynamic_fields[] = $dynamic_field;
        }
      }
    }
  }
  return $dynamic_fields;
}