protected function AbstractSearchApiSolrMultilingualBackend::alterSolrResponseBody in Search API Solr 8.2
@inheritdoc
Overrides SearchApiSolrBackend::alterSolrResponseBody
File
- src/
Plugin/ search_api/ backend/ AbstractSearchApiSolrMultilingualBackend.php, line 379
Class
- AbstractSearchApiSolrMultilingualBackend
- A abstract base class for all multilingual Solr Search API backends.
Namespace
Drupal\search_api_solr\Plugin\search_api\backendCode
protected function alterSolrResponseBody(&$body, QueryInterface $query) {
$data = json_decode($body);
$index = $query
->getIndex();
$field_names = $this
->getSolrFieldNames($index, TRUE);
$doc_languages = [];
if (isset($data->response)) {
foreach ($data->response->docs as $doc) {
$language_id = $doc_languages[$this
->createId($this
->getIndexId($index), $doc->{$field_names['search_api_id']})] = $doc->{$field_names[SEARCH_API_LANGUAGE_FIELD_NAME]};
foreach (array_keys(get_object_vars($doc)) as $language_specific_field_name) {
$field_name = Utility::getSolrDynamicFieldNameForLanguageSpecificSolrDynamicFieldName($language_specific_field_name);
if ($field_name != $language_specific_field_name) {
if (Utility::getLanguageIdFromLanguageSpecificSolrDynamicFieldName($language_specific_field_name) == $language_id) {
$doc->{$field_name} = $doc->{$language_specific_field_name};
unset($doc->{$language_specific_field_name});
}
}
}
}
}
if (isset($data->highlighting)) {
foreach ($data->highlighting as $solr_id => &$item) {
foreach (array_keys(get_object_vars($item)) as $language_specific_field_name) {
$field_name = Utility::getSolrDynamicFieldNameForLanguageSpecificSolrDynamicFieldName($language_specific_field_name);
if ($field_name != $language_specific_field_name) {
if (Utility::getLanguageIdFromLanguageSpecificSolrDynamicFieldName($language_specific_field_name) == $doc_languages[$solr_id]) {
$item->{$field_name} = $item->{$language_specific_field_name};
unset($item->{$language_specific_field_name});
}
}
}
}
}
if (isset($data->facet_counts)) {
$facet_set_helper = new FacetSet();
foreach (get_object_vars($data->facet_counts->facet_fields) as $language_specific_field_name => $facet_terms) {
$field_name = Utility::getSolrDynamicFieldNameForLanguageSpecificSolrDynamicFieldName($language_specific_field_name);
if ($field_name != $language_specific_field_name) {
if (isset($data->facet_counts->facet_fields->{$field_name})) {
// @todo this simple merge of all language specific fields to one
// language unspecific fields should be configurable.
$key_value = $facet_set_helper
->convertToKeyValueArray($data->facet_counts->facet_fields->{$field_name}) + $facet_set_helper
->convertToKeyValueArray($facet_terms);
$facet_terms = [];
foreach ($key_value as $key => $value) {
// @todo check for NULL key of "missing facets".
$facet_terms[] = $key;
$facet_terms[] = $value;
}
}
$data->facet_counts->facet_fields->{$field_name} = $facet_terms;
}
}
}
$body = json_encode($data);
}