O Elasticsearch 5 está configurado, mas a página de pesquisa não carrega com o erro "Fielddata is disabled…"
Este tópico descreve como corrigir o problema com o Elasticsearch 5, em que a página de pesquisa não carrega, e a exceção semelhante à seguinte é lançada:
{"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.\"}].
Versões afetadas
- Adobe Commerce 2.2.x
- Elasticsearch v.5
Problema
Pré-condições: o Elasticsearch 5 está configurado.
Na solicitação de pesquisa, a seguinte exceção é gerada nos logs:
{"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
Por padrão, somente determinados tipos de atributos de produto podem ser usados na Navegação em camadas. Eles são Sim/Não, Lista suspensa, Seleção múltipla e Preço. É por isso que, no Administrador do Commerce, você não pode definir um atributo de nenhum outro tipo como Usar na Navegação em Camadas = Filtrável ou Usar na Navegação em Camadas de Resultados da Pesquisa = Sim. Mas há uma possibilidade técnica de contornar essa limitação alterando diretamente os valores is_filterable
e is_filterable_in_search
no banco de dados. Se isso acontecer e qualquer outro tipo de atributo, como Data, Texto, etc., for definido para ser usado na Navegação em camadas, o Elasticsearch 5 acionará uma exceção.
Para garantir que esse seja o caso, você precisa descobrir se há algum outro atributo diferente de Suspenso, Seleção múltipla e Preço que estejam definidos para serem usados na Navegação em camadas. Execute a seguinte consulta para procurar esses atributos:
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');
O resultado conterá uma lista de atributos usados para a Navegação em camadas, cujo tipo não permite isso. Siga as etapas descritas na seção a seguir para corrigir isso.
Solução
Para corrigir o problema, você precisa definir is_filterable
(ou seja, usado na Navegação em Camadas) e filterable_in_search
(ou seja, usado na Navegação em Camadas dos resultados da pesquisa) como "0" (não usado). Para fazer isso, siga estas etapas:
-
Criar um backup de banco de dados.
-
Use uma ferramenta de banco de dados como phpMyAdmin ou acesse o BD manualmente a partir da linha de comando para executar a seguinte consulta 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');
-
Execute a reindexação completa da Pesquisa no catálogo usando o seguinte comando:
code language-bash bin/magento indexer:reindex catalogsearch_fulltext
-
Limpar cache executando
code language-bash bin/magento cache:clean
ou no Administrador do Commerce em Sistema > Ferramentas > Gerenciamento de Cache.
Agora você pode realizar pesquisas em catálogos sem problemas.