Commit aed18b5d authored by Markus Kalkbrenner's avatar Markus Kalkbrenner Committed by Markus Kalkbrenner
Browse files

Issue #3302986 by mkalkbrenner, damontgomery: Support for fulltext searches in...

Issue #3302986 by mkalkbrenner, damontgomery: Support for fulltext searches in combination with "Language (with fallback)" processor
parent d7e380f2
Loading
Loading
Loading
Loading
+6 −5
Changes for src/Plugin/search_api/backend/SearchApiSolrBackend.php: 6 added lines, 5 removed lines.
Original line number Diff line number Diff line
@@ -1191,6 +1191,7 @@ class SearchApiSolrBackend extends BackendPluginBase implements SolrBackendInter
    $index_id = $this->getTargetedIndexId($index);
    $site_hash = $this->getTargetedSiteHash($index);
    $languages = $this->languageManager->getLanguages();
    $fulltext_fields = $index->getFulltextFields();
    $request_time = $this->formatDate($this->time->getRequestTime());
    $base_urls = [];

@@ -1273,6 +1274,7 @@ class SearchApiSolrBackend extends BackendPluginBase implements SolrBackendInter
        }

        $type = $field->getType();
        $field_identifier = $field->getFieldIdentifier();
        if ($field->getPropertyPath() === 'auto_aggregated_fulltext_field') {
          if (!array_key_exists($type, $auto_aggregate_values)) {
            foreach ($item_fields as $tmp_field) {
@@ -1284,20 +1286,24 @@ class SearchApiSolrBackend extends BackendPluginBase implements SolrBackendInter
          }

          $first_value = $this->addIndexField($doc, $field_names[$name], $auto_aggregate_values[$type], $type, $boost_terms);
          if (in_array($field_identifier, $fulltext_fields)) {
            foreach ($fallback_languages as $fallback_language) {
              $event = new PreAddLanguageFallbackFieldEvent($fallback_language, $auto_aggregate_values[$type], $type);
              $this->eventDispatcher->dispatch($event);
              $this->addIndexField($doc, $fallback_field_names[$fallback_language][$name], $event->getValue(), $type, $boost_terms);
            }
          }
        }
        else {
          $first_value = $this->addIndexField($doc, $field_names[$name], $field->getValues(), $type, $boost_terms);
          if (in_array($field_identifier, $fulltext_fields)) {
            foreach ($fallback_languages as $fallback_language) {
              $event = new PreAddLanguageFallbackFieldEvent($fallback_language, $field->getValues(), $type);
              $this->eventDispatcher->dispatch($event);
              $this->addIndexField($doc, $fallback_field_names[$fallback_language][$name], $event->getValue(), $type, $boost_terms);
            }
          }
        }

        // Enable sorts in some special cases.
        if ($first_value && !array_key_exists($name, $special_fields)) {
@@ -1345,11 +1351,6 @@ class SearchApiSolrBackend extends BackendPluginBase implements SolrBackendInter
              // copy the first value in a single value field for sorting.
              $doc->addField($key, $first_value);
            }
            foreach ($fallback_languages as $fallback_language) {
              $event = new PreAddLanguageFallbackFieldEvent($fallback_language, $first_value, $type);
              $this->eventDispatcher->dispatch($event);
              $doc->addField(preg_replace('/^([a-z]+)m_/', '$1s_', $fallback_field_names[$fallback_language][$name]), $event->getValue());
            }
          }
        }
      }