Поиск по релевантности Magento Значение всегда 0 - PullRequest
8 голосов
/ 02 февраля 2012

Я заметил, что, похоже, не смог отсортировать по релевантности в поиске по умолчанию.Независимо от того, пробовал ли я ASC или DESC, результаты всегда были одинаковыми и довольно мало значимыми.

После дальнейших исследований я обнаружил метод addSearchFilter () в Mage_CatalogSearch_Model_Resource_Fulltext_Collection :

/**
 * Add search query filter
 *
 * @param string $query
 * @return Mage_CatalogSearch_Model_Resource_Fulltext_Collection
 */
public function addSearchFilter($query)
{
    Mage::getSingleton('catalogsearch/fulltext')->prepareResult();

    $this->getSelect()->joinInner(
        array('search_result' => $this->getTable('catalogsearch/result')),
        $this->getConnection()->quoteInto(
            'search_result.product_id=e.entity_id AND search_result.query_id=?',
            $this->_getQuery()->getId()
        ),
        array('relevance' => 'relevance')
    );

    Zend_Debug::dump($this->getData());exit;

    return $this;
}

Результат моего дампа данных показывает результаты просто отлично, но столбец «релевантность» всегда равен 0,00000.Я не вносил никаких изменений в поиск по каталогу, и это Magento 1.6.0.

Я также сбросил фактический SQL:

SELECT `e`.*, `search_result`.`relevance` FROM `catalog_product_entity` AS `e` INNER JOIN `catalogsearch_result` AS `search_result` ON search_result.product_id=e.entity_id AND search_result.query_id='33'

Если у кого-то еще есть опыт расчета релевантностиЯ был бы очень признателен за направление.

1 Ответ

22 голосов
/ 08 февраля 2012

Краткий ответ: актуальность используется только в режиме полнотекстового поиска.

Фон

В интерфейсе администратора вы можете настроить «тип поиска» для Magento.
Этот параметр находится в Система> Конфигурация> Каталог> Поиск по каталогу> Тип поиска

Если переключить на полный текст (и после переиндексации) и очистить таблицу catalogsearch_query, Magento будет использовать возможность полнотекстового поиска MySQL, задав условие WHERE в запросе следующим образом:

...MATCH (s.data_index) AGAINST (:query IN BOOLEAN MODE) AS `relevance`...

Это вернет число с плавающей запятой, которое будет использоваться в качестве значения релевантности. Простое попадание даст вам релевантность 1. Если индекс содержит поисковый термин более одного раза, ему будет придана более высокая релевантность.

Также логический полнотекстовый поиск позволяет использовать модификаторы поиска, такие как "+ this -notThis".
Дополнительную информацию о значении релевантности булевого полнотекстового поиска MySQL можно найти здесь http://dev.mysql.com/doc/refman/5.1/de/fulltext-boolean.html

Если используется режим поиска «Нравится», релевантность всегда равна 0 (как вы заметили).

Индексация

Способ, которым Magento создает поисковый индекс, не очень интуитивен, я рекомендую взглянуть на таблицу catalogsearch_fulltext. Затем настройте атрибуты, которые вы хотите использовать в поиске, настроив для них свойство Используется в быстром поиске . Этот параметр можно найти в Каталог> Атрибуты> Управление атрибутами . Затем переиндексируйте индекс поиска по каталогу.
Я также рекомендую очистить таблицу catalogsearch_result после настройки атрибутов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...