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
NOTE
Elasticsearch v.5 è obsoleto per Adobe Commerce 2.3.x

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 = . 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:

  1. Creare un backup del database.

  2. 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');
    
  3. Esegui la reindicizzazione completa della ricerca nel catalogo utilizzando il seguente comando:

    code language-bash
    bin/magento indexer:reindex catalogsearch_fulltext
    
  4. 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.

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a