ene*_*nen 13 collections magento e-commerce entity-attribute-value magento-1.6
首先,我在SO中发现了类似的问题,但没有任何答案.所以,问题的第一部分有点重复.我想改进Magento的搜索结果.这是我已经做过的事情:
1.搜索AND而不是OR当有多个单词时.
2. Ajax搜索从任何地方开始搜索,而不仅仅是从字段的开头搜索.
3.修剪s单词中的最后一个以防止在使用复数形式搜索时出现空结果.
4.我将搜索类型更改Like为Fulltext或者Combine但结果不是更好,甚至是最差的,所以我保持原样.它Like现在,所以没有relevance订购.
我想要尝试的最后一件事是将其添加到搜索查询中:
SELECT ... other non-full-text-cols
MATCH (product_title) AGAINST ('lean body for her') AS rel1,
MATCH (content) AGAINST ('lean body for her') AS rel2
FROM table
WHERE MATCH (product_title,content) AGAINST ('lean body for her')
ORDER BY (rel1*1.5)+(rel2)
Run Code Online (Sandbox Code Playgroud)
这是我的查询,但我不确定它是否可行,因为我无法测试它:
$this->_productCollection->addAttributeToSelect(
array(
'rel1' => new Zend_Db_Expr('MATCH (name) AGAINST ("'.$queryText.'")'),
'rel2' => new Zend_Db_Expr('MATCH (short_description) AGAINST ("'.$queryText.'")')
)
);
$this->_productCollection->getSelect()
->where('MATCH (name,short_description) AGAINST ("'.$queryText.'")')
->order('(rel1*1.5)+(rel2)');
Run Code Online (Sandbox Code Playgroud)
如果在产品标题中找到搜索查询,则主要思想是为结果添加奖励权重.问题是我不知道在哪里修改查询.我找不到它的位置.$this->_productCollection我不知道是不是正确的对象.我查看了所有Collection.php文件,资源模型,模型甚至查询日志,但没有运气.某些文件中只有少量的1或2行部分,但不是完整的查询.我是Magento的新手,但在找到这种类型的东西时仍然存在问题.那么,当我必须扩展查询时,我必须放置我的附加内容?
Community Edition Magento,版本1.6.1.0.
注意:我知道改进搜索结果的某些扩展程序将比我的解决方案更好,但是现在我必须以这种方式执行.对我来说这也是一次很好的经历.
编辑:
所以,我想出了如何为订购添加我的自定义字段,但
我认为这是不明智的.在class Mage_CatalogSearch_Model_Layer extends Mage_Catalog_Model_Layer的prepareProductCollection方法,我添加了两个加入到查询并获取领域rel1和rel2:
$collection->getSelect()->joinLeft(
array('cpev' => 'catalog_product_entity_varchar'),
'cpev.entity_id = e.entity_id AND cpev.attribute_id = 96',
array('rel1' => new Zend_Db_Expr('2.01*(LENGTH(cpev.value) - LENGTH(REPLACE(LCASE(cpev.value), LCASE("'.$queryText.'"), ""))) / LENGTH("'.$queryText.'")'))
);
$collection->getSelect()->joinLeft(
array('cpet' => 'catalog_product_entity_text'),
'cpet.entity_id = e.entity_id AND cpet.attribute_id = 506',
array('rel2' => new Zend_Db_Expr('(LENGTH(cpet.value) - LENGTH(REPLACE(LCASE(cpet.value), LCASE("'.$queryText.'"), ""))) / LENGTH("'.$queryText.'")'))
);
Run Code Online (Sandbox Code Playgroud)
我现在有这些字段但是你可以看到我有硬编码的东西,比如attribute_id = 96等等一点也不好,而且每次都不起作用 - 我直接从数据库表中检查了这些id.我这样写是因为我没有访问name和short_description字段,但它们在结果中.不知道为什么.所以,cpev.value是name领域,cpet.value是short_description领域.此外,我不能按这些字段订购结果.我尝试过$collection->addOrder('SUM(rel1+rel2)');,$collection->getSelect()->order(new Zend_Db_Expr('SUM(rel1+rel2)').' DESC');有些addAttributeToFilter东西等等,但它没有用.
编辑2: 我接受了@james的回答,但最后我们购买了一个用于改进搜索结果的扩展程序.
在Mage_CatalogSearch_Model_Resource_Fulltext检查出prepareResult(线310 1.7 CE),并查找以下内容:
$select->columns(array('relevance' => new Zend_Db_Expr(0)));
Run Code Online (Sandbox Code Playgroud)
Magento将所有搜索结果相关性设置为0(!);在此处添加您想要的相关性(越高越好)。您可以在其中创建自定义查询,Zend_Db_Expr()以在属性匹配上产生更高的相关性。
| 归档时间: |
|
| 查看次数: |
14784 次 |
| 最近记录: |