Magento Поиск "релевантность" значение всегда 0

Я заметил, что я, похоже, не смог отсортировать по релевантности в поиске по умолчанию. Независимо от того, пробовал ли я 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 ответов


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

фон

в интерфейсе администратора вы можете настроить "тип поиска" для Magento.
Этот параметр можно найти в разделе Система > Конфигурация > КАТАЛОГ > КАТАЛОГ Поиск > Поиск Типа

при переключении на Fulltext (и после переиндексации) и очистке catalogsearch_query table, 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 таблица после настройки атрибутов.