Расширенный поиск частично нарушен после обновления MySQL до версии 5.6


Может быть, кто-то сталкивался с такой же проблемой и у него есть решение для этого?

Мой хостинг-провайдер недавно обновил версию MySQL до 5.6, и после этого Расширенный поиск больше не может найти большинство результатов поиска по пользовательским атрибутам. Например, это дает хорошие результаты, если вы ищете по "артикулу" или "Производителю". Никаких результатов при поиске по пользовательским атрибутам, таким как "исходный код" и т. Д. Даже поиск по атрибуту "имя" Не дает больше не работаю. В поиске по умолчанию они работают (мини-форма), и они отлично работают в расширенном поиске также до обновления MySQL. Может ли кто-нибудь увидеть за этим какую-то логику и указать на какое-то направление для решения проблемы?

Magento CE версии 1.6.1.0

Есть идеи? Кто-нибудь?

Author: user487772, 2013-06-03

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

 0
Author: Anthony, 2013-10-10 08:12:52

Это известная проблема, и она была исправлена с помощью предложения на 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

 1
Author: philwinkle, 2013-07-09 04:35:17

Это ошибка в mysql 5.6 из-за того, как выполняется расширенный поисковый запрос. Ошибка подробно описана здесь:

Http://bugs.mysql.com/bug.php?id=70608

Там есть обходной путь для 5.6, выполнив:

Установить optimizer_switch='полупереключение=выкл.';

 1
Author: Anthony Tso, 2013-10-17 08:33:44

Вы можете удалить 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

 0
Author: a_v_o_g_t, 2014-02-07 15:47:55