L'Elasticsearch 5 è configurato, ma la pagina di ricerca non viene caricata con l'errore "Dati campo è disabilitato…"
Questo argomento descrive come risolvere il problema con l’Elasticsearch 5, in cui la pagina di ricerca non viene caricata e viene generata l’eccezione simile alla seguente:
{"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.\"}].
Versioni interessate
- Adobe Commerce 2.2.x
- Elasticsearch v.5
Problema
Prerequisiti: l’Elasticsearch 5 è configurato.
Nella richiesta di ricerca nei registri viene generata la seguente eccezione:
{"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.\"}].
Causa
Per impostazione predefinita, solo alcuni tipi di attributi di prodotto possono essere utilizzati nella navigazione a livelli. Sono Sì/No, A discesa, Selezione multipla e Prezzo. Per questo motivo, nell'amministratore di Commerce non è possibile impostare un attributo di qualsiasi altro tipo come Utilizzo nella navigazione a livelli = Filterable o Utilizzo nella navigazione a livelli dei risultati di ricerca = Sì. Esiste tuttavia la possibilità tecnica di aggirare questo limite modificando direttamente i valori is_filterable
e is_filterable_in_search
nel database. In questo caso, e qualsiasi altro tipo di attributo, ad esempio Data, Testo e così via, è impostato per essere utilizzato in Navigazione a livelli, l'Elasticsearch 5 genera un'eccezione.
Per questo motivo, è necessario verificare se esistono attributi diversi da Menu a discesa, Selezione multipla e Prezzo impostati per l'utilizzo in Navigazione a livelli. Eseguire la query seguente per cercare questi attributi:
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');
Il risultato conterrà un elenco di attributi utilizzati per la navigazione a livelli, il cui tipo non lo consente. Per risolvere il problema, segui i passaggi descritti nella sezione seguente.
Soluzione
Per risolvere il problema, è necessario impostare is_filterable
(ovvero, utilizzato in Navigazione a livelli) e filterable_in_search
(ovvero, utilizzato nei risultati della ricerca Navigazione a livelli) su "0" (non utilizzato). A questo scopo, effettua le seguenti operazioni:
-
Creare un backup del database.
-
Utilizza uno strumento di database come phpMyAdmin oppure accedi al database manualmente dalla riga di comando per eseguire la seguente query SQL:
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');
-
Esegui la reindicizzazione completa della ricerca nel catalogo utilizzando il seguente comando:
code language-bash bin/magento indexer:reindex catalogsearch_fulltext
-
Pulisci cache eseguendo
code language-bash bin/magento cache:clean
o nell'amministratore di Commerce in Sistema > Strumenti > Gestione cache.
Ora dovresti essere in grado di eseguire ricerche nel catalogo senza problemi.