Расширенный поиск частично нарушен после обновления MySQL до версии 5.6
Может быть, кто-то сталкивался с такой же проблемой и у него есть решение для этого?
Мой хостинг-провайдер недавно обновил версию MySQL до 5.6, и после этого Расширенный поиск больше не может найти большинство результатов поиска по пользовательским атрибутам. Например, это дает хорошие результаты, если вы ищете по "артикулу" или "Производителю". Никаких результатов при поиске по пользовательским атрибутам, таким как "исходный код" и т. Д. Даже поиск по атрибуту "имя" Не дает больше не работаю. В поиске по умолчанию они работают (мини-форма), и они отлично работают в расширенном поиске также до обновления MySQL. Может ли кто-нибудь увидеть за этим какую-то логику и указать на какое-то направление для решения проблемы?
Magento CE версии 1.6.1.0
Есть идеи? Кто-нибудь?
4 answers
У меня была та же проблема. Мне пришлось вернуться к mysql 5.5, чтобы он работал.
Я сузил проблему до этого запроса при поиске по имени, который не возвращает результатов, потому что он не соответствует слову:
select
e.*,
price_index.price,
price_index.final_price,
IF(price_index.tier_price IS NOT NULL, LEAST(price_index.min_price, price_index.tier_price), price_index.min_price) as minimal_price,
price_index.min_price,
price_index.max_price,
price_index.tier_price,
cat_index.position as cat_index_position
from
catalog_product_entity as e
inner join
catalog_product_index_price as price_index
on (price_index.entity_id = e.entity_id AND price_index.website_id = '1' AND price_index.customer_group_id = 0)
inner join
catalog_category_product_index as cat_index on (cat_index.product_id=e.entity_id AND cat_index.store_id='1' AND cat_index.visibility IN(3, 4) AND cat_index.category_id='2')
where
(e.entity_id IN
(SELECT
t1.entity_id
FROM
catalog_product_entity_varchar AS t1
LEFT JOIN
catalog_product_entity_varchar AS t2
ON t1.entity_id = t2.entity_id
AND t1.attribute_id = t2.attribute_id
AND t2.store_id=1
WHERE
(t1.store_id = 0)
AND
(t1.attribute_id = 60)
AND
(t1.entity_id = price_index.entity_id)
AND
(IF(t2.value_id>0, t2.value, t1.value) LIKE '%gift%')
)
);
Ближе к концу IF(t2.value_id>0, t2.значение, t1.значение), похоже, ничего не возвращает, когда t2.value_id и t2.значение равны нулю, если я изменю его на IF(t1.value_id>0, t1.значение, t1.значение), это сработало.
Вы можете построить используемый запрос для расширенного поиска введите:
var_dump($this->getSearchModel()->getProductCollection());
die();
В getResultCount() из app\code\local\Mage\CatalogSearch\Block\Advanced\Result.php
Затем посмотрите в разделе _parts
Это известная проблема, и она была исправлена с помощью предложения на Github Magento 2 некоторое время назад:
Https://github.com/magento/magento2/issues/202
Он также вошел в новую альфа-версию CE 1.8*:
public function supportEngine()
{
$variables = $this->_getConnection()
->fetchPairs('SHOW VARIABLES');
return (!isset($variables['have_innodb']) || $variables['have_innodb'] != 'YES') ? false : true;
}
Широко распространенная разница прошла обход - я отразил ее здесь:
Https://gist.github.com/philwinkle/5954728
* Источник: http://svn.magentocommerce.com/source/branches/1.8/app/code/core/Mage/Install/Model/Installer/Db/Mysql4.php
Это ошибка в mysql 5.6 из-за того, как выполняется расширенный поисковый запрос. Ошибка подробно описана здесь:
Http://bugs.mysql.com/bug.php?id=70608
Там есть обходной путь для 5.6, выполнив:
Установить optimizer_switch='полупереключение=выкл.';
Вы можете удалить set optimizer_switch='semijoin=выкл'; прямо в вашей консоли mysql. откройте его с помощью "mysql -u root-p__ПАРОЛЬ_ЗДЕСЬ__" и введите set global optimizer_switch='semijoin=выкл.';
Вот и все.
Я подтверждаю, что это устраняет проблему. magento 1.7.0.2 версия сервера mysql: 5.6.15-63.0- сервер регистрации Percona (GPL), выпуск 63.0
ВЫБЕРИТЕ @ @optimizer_switch\G ************* 1. ряд ************* @@оптимизатор_свитч: index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=off,loosescan=on,firstmatch=on,subquery_materialization_cost_based=on,use_index_extensions=on