Magento搜索"相关性"值始终为0

Zac*_*ler 8 magento

我注意到我似乎无法对默认搜索中的相关性进行排序.无论我是尝试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;
}
Run Code Online (Sandbox Code Playgroud)

我的数据转储结果显示结果很好,但"相关性"列始终为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'
Run Code Online (Sandbox Code Playgroud)

如果其他人有更多计算相关性的经验,我会非常感谢方向.

Vin*_*nai 22

简答:相关性仅用于全文搜索模式.

背景

在管理界面中,您可以为Magento配置"搜索类型".
可以在系统>配置>目录>目录搜索>搜索类型下找到此设置

如果切换到Fulltext(并在重建索引之后)并清除catalogsearch_query表格,Magento将使用MySQL全文搜索功能,在查询中指定WHERE条件,如下所示:

...MATCH (s.data_index) AGAINST (:query IN BOOLEAN MODE) AS `relevance`...
Run Code Online (Sandbox Code Playgroud)

这将返回将用作相关性值的浮点数.普通命中将为您提供1的相关性.如果索引包含的搜索项多于一次,则它将具有更高的相关性.

此外,布尔全文搜索还可以使用搜索修饰符,例如"+ this -notThis".
有关MySQL布尔全文搜索的相关性权重的更多信息,请访问http://dev.mysql.com/doc/refman/5.1/de/fulltext-boolean.html

如果使用搜索模式"Like",则相关性始终为0(如您所见).

索引

Magento构建搜索索引的方式不是很直观,我建议看一下表格catalogsearch_fulltext.然后通过调整" 在快速搜索中使用"属性来调整要在搜索中使用的属性.可在" 目录">"属性">"管理属性"下找到此设置.然后重新索引目录搜索索引.
我还建议catalogsearch_result您在调整属性后清除表格.

  • 在截断catalogsearch_result后,您还需要"更新catalogsearch_query SET is_processed = 0"以强制重新评估查询,否则您将得到空白结果. (4认同)