Elasticsearch 5 ist konfiguriert, die Suchseite wird jedoch nicht mit dem Fehler "Felddaten sind deaktiviert…"geladen.
Hier wird beschrieben, wie Sie das Problem mit Elasticsearch 5 beheben, bei dem die Suchseite nicht geladen wird und eine ähnliche Ausnahme wie die folgende ausgegeben wird:
{"0":"{\"error\":{\"root_cause\":[{\"type\":\"illegal_argument_exception\",\"reason\":\"Fielddata is disabled on text fields by default. Set fielddata=true on [%attribute_code%]] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.\"}].
Betroffene Versionen
- Adobe Commerce 2.2.x
- Elasticsearch v.5
Problem
Voraussetzungen: Elasticsearch 5 ist konfiguriert.
Bei Suchanfragen wird die folgende Ausnahme in Protokollen generiert:
{"0":"{\"error\":{\"root_cause\":[{\"type\":\"illegal_argument_exception\",\"reason\":\"Fielddata is disabled on text fields by default. Set fielddata=true on [%attribute_code%]] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.\"}].
Ursache
Standardmäßig können in der Ebenennavigation nur bestimmte Arten von Produktattributen verwendet werden. Es handelt sich um Ja/Nein, Dropdown, Multi-Selektiv und Preis. Aus diesem Grund können Sie in Commerce Admin kein Attribut eines anderen Typs als In der Navigationsschicht mit Ebenen verwenden = filterbar oder In der Navigationsstruktur mit Suchergebnissen verwenden = Ja festlegen. Es gibt jedoch eine technische Möglichkeit, diese Einschränkung zu umgehen, indem die Werte is_filterable
und is_filterable_in_search
in der Datenbank direkt geändert werden. Wenn dies der Fall ist und ein anderer Attributtyp wie Datum, Text usw. für die Verwendung in der Ebenennavigation festgelegt ist, gibt Elasticsearch 5 eine Ausnahme aus.
Um sicherzustellen, dass dies der Fall ist, müssen Sie herausfinden, ob es andere Attribute als Dropdown, Multiple Choice und Price gibt, die für die Verwendung in der Ebenennavigation festgelegt sind. Führen Sie die folgende Abfrage aus, um nach diesen Attributen zu suchen:
SELECT ea.attribute_code, ea.frontend_input, cea.is_filterable, cea.is_filterable_in_search FROM eav_attribute AS ea
-> INNER JOIN catalog_eav_attribute AS cea ON ea.attribute_id = cea.`attribute_id`
-> WHERE (is_filterable = 1 OR is_filterable_in_search = 1) AND frontend_input NOT IN ('boolean', 'multiselect', 'select', 'price');
Das Ergebnis enthält eine Liste von Attributen, die für die Navigation mit Ebenen verwendet werden, deren Typ dies nicht zulässt. Führen Sie die im folgenden Abschnitt beschriebenen Schritte aus, um dies zu beheben.
Lösung
Um das Problem zu beheben, müssen Sie is_filterable
(d. h. verwendet in der Ebenennavigation) und filterable_in_search
(d. h. in der Suchergebnisnavigation verwendet) auf "0"(nicht verwendet) setzen. Gehen Sie dazu wie folgt vor:
-
Erstellen Sie eine Datenbanksicherung.
-
Verwenden Sie ein Datenbank-Tool wie phpMyAdmin oder greifen Sie über die Befehlszeile manuell auf die DB zu, um die folgende SQL-Abfrage auszuführen:
code language-sql UPDATE catalog_eav_attribute AS cea INNER JOIN eav_attribute AS ea ON ea.attribute_id = cea.attribute_id SET cea.is_filterable = 0, cea.is_filterable_in_search = 0 WHERE (cea.is_filterable = 1 OR cea.is_filterable_in_search = 1) AND frontend_input NOT IN ('boolean', 'multiselect', 'select', 'price');
-
Führen Sie die vollständige Neuindizierung der Katalogsuche mit dem folgenden Befehl aus:
code language-bash bin/magento indexer:reindex catalogsearch_fulltext
-
Cache bereinigen durch Ausführen
code language-bash bin/magento cache:clean
oder im Commerce Admin unter System > Tools > Cache-Verwaltung.
Jetzt sollten Sie in der Lage sein, Katalogsuchen ohne Probleme durchzuführen.