2

report.CRITICAL: {"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Fielddata is disabled on text fields by default. Set fielddata=true on [category_ids] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."}],"type":"search_phase_execution_exception","reason":"all shards failed","phase":"query","grouped":true,"failed_shards":[{"shard":0,"index":"magento233_ela6_product_1_v6","node":"C3kR1cBBR0y_TcZ3EZQgmQ","reason":{"type":"illegal_argument_exception","reason":"Fielddata is disabled on text fields by default. Set fielddata=true on [category_ids] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."}}],"caused_by":{"type":"illegal_argument_exception","reason":"Fielddata is disabled on text fields by default. Set fielddata=true on [category_ids] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.","caused_by":{"type":"illegal_argument_exception","reason":"Fielddata is disabled on text fields by default. Set fielddata=true on [category_ids] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."}}},"status":400} {"exception":"[object] (Elasticsearch\Common\Exceptions\BadRequest400Exception(code: 400): {\"error\":{\"root_cause\":[{\"type\":\"illegal_argument_exception\",\"reason\":\"Fielddata is disabled on text fields by default. Set fielddata=true on [category_ids] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.\"}],\"type\":\"search_phase_execution_exception\",\"reason\":\"all shards failed\",\"phase\":\"query\",\"grouped\":true,\"failed_shards\":[{\"shard\":0,\"index\":\"magento233_ela6_product_1_v6\",\"node\":\"C3kR1cBBR0y_TcZ3EZQgmQ\",\"reason\":{\"type\":\"illegal_argument_exception\",\"reason\":\"Fielddata is disabled on text fields by default. Set fielddata=true on [category_ids] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.\"}}],\"caused_by\":{\"type\":\"illegal_argument_exception\",\"reason\":\"Fielddata is disabled on text fields by default. Set fielddata=true on [category_ids] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.\",\"caused_by\":{\"type\":\"illegal_argument_exception\",\"reason\":\"Fielddata is disabled on text fields by default. Set fielddata=true on [category_ids] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.\"}}},\"status\":400}

Facing this issue when we have Magento 2.3.3 and ES 6.x and PHP7.2

Magento given doc https://magento1544124303.zendesk.com/hc/en-us/articles/360031328652-illegal-argument-exception-on-category-page-with-Elasticsearch-5-0-Fielddata-is-disabled-on-text-fields-by-default- not even help here.

Anybody having idea how to resolve this issue?

9
  • Use latest ES version - elastic.co/guide/en/elasticsearch/reference/6.8/… .. It will solve the issue if you don't have 3rd party modules otherwise 3rd party modules also requires upgrade. – MageSoftech Jan 7 '20 at 16:32
  • But Magento 2.3 support 6.5.x only right? Will it support 6.8? – seeni Jan 7 '20 at 17:36
  • We have tried that too. Still same issue. – seeni Jan 7 '20 at 17:44
  • is category_ids a custom attribute created by you or a module? – paj Jan 7 '20 at 18:36
  • I had something like this when i upgraded. There was an error in my code and the Indexing within Magento wasn't completing. More info would be helpful. Have you written your own module? Did it work before on a previous Magento/Elastic version? – Anthony Jan 8 '20 at 1:58
7

Got across this several times and we came across this https://support.magento.com/hc/en-us/articles/360027356612-Elasticsearch-5-is-configured-but-search-page-does-not-load-with-Fielddata-is-disabled-error which not only identifies the problem but also gives a fix which works with several Magento versions. I tried 2.3.5 and 2.4.2.

By default, only certain types of product attributes can be used in Layered Navigation. They are Yes/No, Dropdown, Multipleselect, and Price. That is why in Magento Admin, you cannot set an attribute of any other type as Use in Layered Navigation = Filterable or Use in Search Results Layered Navigation = Yes. But there is a technical possibility to get around this limitation by directly changing the is_filterable and is_filterable_in_search values in the database. If this happens, and any other attribute type, like Date, Text, etc., is set to be used in Layered Navigation, Elasticsearch 5 (my edit: and others like ElasticSearch 6 and 7) throws an exception.

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.

Step 1. Identify the product attributes which generate the issue using an SQL tool like phpmyadmin

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');

To fix the issue, you need to set is_filterable (that is, used in Layered Navigation) and filterable_in_search (that is, used in search results Layered Navigation) to "0" (not used).

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');

then reindex all

bin/magento indexer:reindex

The fix says to reindex only catalogsearch_fulltext but this won't work if you have custom search modules since they use different indexes.

2
  • legend! great work – pixiemedia Apr 7 at 15:11
  • This saved me a Ton of time ... Thanks a ton @Mike !!! – Sharath Kumar May 11 at 1:46
-3

we fixed this issue by setting fielddata=true for the category_ids field after every reindex. After every reindex fielddata values are reset. so we were written a script which set fielddata=true for the particular field after every reindex.

4
  • How to do that? – Feedlay Technologies Jul 18 '20 at 6:28
  • You have to set this from kibana interfacr – seeni Jul 18 '20 at 6:57
  • Actually i have magento2.3.4 and google cloud serve so in that how i can access that ? – Feedlay Technologies Jul 18 '20 at 8:38
  • 1
    would be nice if you could actually share the fix :( – Alex Timmer Nov 17 '20 at 12:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.