Атрибут множественного выбора не индексирует CE 2.6.1


Я перенес свой сайт с 1.9x на 2.6.1. У меня есть по крайней мере 2 атрибута множественного выбора, которые не индексируются в catalog_product_index_eav. Исследуя эту проблему, я обнаружил, что если для eav_attribute.backend_type установлено значение varchar, я должен увидеть его в catalog_product_entity_varchar. Его там нет, но я нашел его в catalog_product_entity_text.

Я обнаружил эту проблему, выполнив расширенный поиск и поняв, что, когда я выбрал один из нескольких вариантов выбора атрибуты для поиска, результаты не найдены. Они действительно работают на моем сайте 1.9x. Я проверил все настройки атрибутов. Я даже создал новый атрибут множественного выбора в качестве теста, и это отлично работает. Я даже вручную добавил нерабочий атрибут в таблицу catalog_product_index_eav, а затем поиск мог его найти.

Итак, я ищу больше способов отладки или других вещей, чтобы проверить, почему он не индексируется в catalog_product_index_eav.

Спасибо

Author: sharmstr, 2017-05-15

2 answers

Я смог изменить эти сценарии, чтобы устранить мою проблему: https://dev98.de/2017/01/19/fixing-issues-after-changing-product-attribute-type-from-varchar-to-text/

Первое, что я сделал, это изменил свои атрибуты с text на varchar в таблице eav_attribute. Затем я запустил следующий sql

UPDATE catalog_product_entity_varchar, catalog_product_entity_text 
SET catalog_product_entity_varchar.value = catalog_product_entity_text.value
WHERE catalog_product_entity_varchar.attribute_id = 
catalog_product_entity_text.attribute_id 
AND catalog_product_entity_varchar.entity_id = 
catalog_product_entity_text.entity_id 
AND catalog_product_entity_text.store_id = 
catalog_product_entity_varchar.store_id 
AND catalog_product_entity_varchar.value is null
AND catalog_product_entity_text.attribute_id = {attribute_id};


INSERT IGNORE INTO catalog_product_entity_varchar 
(store_id, attribute_id, entity_id, value)
select store_id, attribute_id, entity_id, value 
from catalog_product_entity_text 
where catalog_product_entity_text.attribute_id = {attribute_id};
and catalog_product_entity_text.value is not null;

DELETE FROM catalog_product_entity_text where attribute_id = {attribute_id};

После этого я переиндексировал, и все было исправлено.

 4
Author: sharmstr, 2017-05-30 13:06:32

Вот мое аналогичное решение sql, которое может быть немного более понятным и простым в изменении для ваших нужд:

-- View the attributes to verify what we are changing
SELECT * FROM shm2_eav_attribute WHERE frontend_input = 'multiselect' AND entity_type_id = 4

-- Update them to varchar
UPDATE shm2_eav_attribute SET backend_type = 'varchar' WHERE frontend_input = 'multiselect' AND entity_type_id = 4

-- Copy the values from the text table to the varchar table 
INSERT IGNORE INTO shm2_catalog_product_entity_varchar 
SELECT NULL, attribute_id, store_id, VALUE,row_id 
FROM shm2_catalog_product_entity_text
WHERE attribute_id 
IN (SELECT attribute_id FROM shm2_eav_attribute WHERE frontend_input = 'multiselect' AND entity_type_id = 4) 

-- Remove them from the text table
DELETE FROM shm2_catalog_product_entity_text 
WHERE attribute_id IN (SELECT attribute_id FROM shm2_eav_attribute WHERE frontend_input = 'multiselect' AND entity_type_id = 4)
 1
Author: Dennis Kopitz, 2020-01-31 18:40:41