Хобрук: Ваш путь к мастерству в программировании

Magento: улучшение поисковой системы по умолчанию

Итак, я немного изменил поисковую систему Magento по умолчанию, и она работает почти так, как я хочу. (т. е. поиск термина OR на AND). Однако есть еще одна вещь, которую я хотел бы реализовать. Когда человек ищет ряд терминов, таких как Green Apple A, я бы хотел, чтобы продукт Green Apple A отображался первым. Прямо сейчас с оператором AND результаты находятся в том порядке, в котором они были извлечены из БД. Итак, Зеленое яблоко А может появиться где угодно.

Вот функция, которая подготавливает результаты. Это немного сложно для меня, и мне интересно, есть ли простой способ «добавить» результат поиска, который ищет определенную последовательность введенных терминов и объединяет результаты, отдавая этому приоритет, поэтому он появляется первым.

(Извините за длинный код. Обычно я не люблю публиковать большой объем кода)

С Fulltext.php по /stores/my_website/app/code/local/Mage/CatalogSearch/Model/Resource

public function prepareResult($object, $queryText, $query)
{

    $adapter = $this->_getWriteAdapter();
    if (!$query->getIsProcessed()) {
        $searchType = $object->getSearchType($query->getStoreId());

        $preparedTerms = Mage::getResourceHelper('catalogsearch')
            ->prepareTerms($queryText, $query->getMaxQueryWords());

        $bind = array();
        $like = array();
        $likeCond  = '';
        if ($searchType == Mage_CatalogSearch_Model_Fulltext::SEARCH_TYPE_LIKE
            || $searchType == Mage_CatalogSearch_Model_Fulltext::SEARCH_TYPE_COMBINE
        ) {
            $helper = Mage::getResourceHelper('core');
            $words = Mage::helper('core/string')->splitWords($queryText, true, $query->getMaxQueryWords());
            foreach ($words as $word) {
                $like[] = $helper->getCILike('s.data_index', $word, array('position' => 'any'));
            }
            if ($like) {
                $likeCond = '(' . join(' AND ', $like) . ')';
            }
        }
        $mainTableAlias = 's';
        $fields = array(
            'query_id' => new Zend_Db_Expr($query->getId()),
            'product_id',
        );
        $select = $adapter->select()
            ->from(array($mainTableAlias => $this->getMainTable()), $fields)
            ->joinInner(array('e' => $this->getTable('catalog/product')),
                'e.entity_id = s.product_id',
                array())
            ->where($mainTableAlias.'.store_id = ?', (int)$query->getStoreId());

        if ($searchType == Mage_CatalogSearch_Model_Fulltext::SEARCH_TYPE_FULLTEXT
            || $searchType == Mage_CatalogSearch_Model_Fulltext::SEARCH_TYPE_COMBINE
        ) {
            $bind[':query'] = implode(' ', $preparedTerms[0]);
            $where = Mage::getResourceHelper('catalogsearch')
                ->chooseFulltext($this->getMainTable(), $mainTableAlias, $select);
        }

        if ($likeCond != '' && $searchType == Mage_CatalogSearch_Model_Fulltext::SEARCH_TYPE_COMBINE) {
                $where .= ($where ? ' AND ' : '') . $likeCond;
        } elseif ($likeCond != '' && $searchType == Mage_CatalogSearch_Model_Fulltext::SEARCH_TYPE_LIKE) {
            $select->columns(array('relevance'  => new Zend_Db_Expr(0)));
            $where = $likeCond;
        }

        if ($where != '') {
            $select->where($where);
        }

        $sql = $adapter->insertFromSelect($select,
            $this->getTable('catalogsearch/result'),
            array(),
            Varien_Db_Adapter_Interface::INSERT_ON_DUPLICATE);
        $adapter->query($sql, $bind);

        $query->setIsProcessed(1);
    }

    return $this;
}
04.05.2013

Ответы:


1

Я думаю, вы можете попробовать это бесплатное расширение для поиска по умолчанию.

http://www.magentocommerce.com/magento-connect/catalog/product/view/id/12202/s/enhanced-default-search-9697

23.05.2013
Новые материалы

Учебные заметки JavaScript Object Oriented Labs
Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

Разбор строк запроса в vue.js
Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
«Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..