Magento 搜索类型选择: Like, Full Text or Combined?

不同的搜索类型有什么区别?
喜欢
全文
组合式

每个人都一直抱怨Magento搜索,但我相信,如果您花时间计划和正确配置它,它确实可以很好地工作。


喜欢

基于关键字的搜索方法,将您的查询分解为单个单词。请参阅课堂上第326行的内容Mage_CatalogSearch_Model_Resource_Fulltext::prepareResult()

            $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(' OR ', $like) . ')';
            }

您可以看到它在搜索查询中拆分了每个单词,并在LIKE语句中将它们连接在一起-您最终得到了以下内容:

WHERE `attribute` LIKE 'my' OR `attribute` LIKE 'search' OR `attribute` LIKE 'query'

此方法可能适用于某些商店设置,其中产品名称很简单并且客户搜索非常特定的商品

“喜欢”搜索将使用喜欢的'%keyword%'查询进行常规的喜欢匹配。这种搜索的一个优点是它将匹配部分单词。但是它具有严重的缺点:

  • 将很快成为性能问题
  • 相关性不好。在类似的查询中实际上没有“相关性”的概念

全文

基于相关性的搜索-每个搜索查询都根据基于MySQL的MATCH ... AGAINST查询分配的分数进行评分。您可以在Mage_CatalogSearch_Model_Resource_Helper_Mysql4第44行看到这一点:

public function chooseFulltext($table, $alias, $select)
{
    $field = new Zend_Db_Expr('MATCH ('.$alias.'.data_index) AGAINST (:query IN BOOLEAN MODE)');
    $select->columns(array('relevance' => $field));
    return $field;
}

Magento执行全文搜索时使用的数据库表为catalogsearch_fulltext。值示例:

EmCO0014e|Emma Certified|Emma Certified Organic Herbal Tonic Mist TRIAL/TRAVEL|Australian|Certified Organic|Palm Oil Free|Nut Free|Vegan Suitable|

这些值直接链接到您在目录>属性>管理属性下指定为“在快速搜索中使用”的属性

优点:

  • 性能更好
  • 它将排除停用词(例如“ and”,“ with”等)
  • 默认情况下,它将根据相关性为每个结果分配一个分数

全文的缺点是无法进行部分匹配,即搜索“ pho”将找不到“ phone”


结合

很自我解释。看一下Mage_CatalogSearch_Model_Resource_Fulltext的第354 

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

您可以看到它仅在FULLTEXT结果返回后才添加LIKE结果。

如果您认真对待搜索,则应该使用Solr。它的速度更快,并且更相关。不过,您必须拥有Magento EE并自己安装Solr


注意事项

  1. 我强烈建议使用FULLTEXT以获得更好的性能和相关结果
  2. 浏览每个属性,并考虑是否有必要将其添加到全文索引中(“用于快速搜索”)
  3. 默认情况下,产品描述包含在FULLTEXT索引中。我几乎总是删除描述,因为它们会用无关上下文中使用的单词污染相关分数。
  4. 确保全文索引中使用了元属性。用有意义的内容填充它们。
  5. MySQL FULLTEXT有一些怪癖-它有一个被忽略的单词列表,如果您的产品名称由这些单词组成,可能会出现问题!
  6. MySQL默认情况下会忽略4个字符以下的 FULLTEXT 查询。除非更改此值,否则将忽略具有短值的属性。

您可以使用Combine方法解决第5点和第6点的问题-LIKE结果应补偿FULLTEXT被忽略的任何单词。

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论