我们目前有一个Magento网站与大量库存,我们有一些问题与现场搜索结果的相关性。我们目前设置为"结合喜欢和全文",但结果不是我们所期望的。例如,搜索"李·查尔德"(作者),会出现三本李·查尔德的书,然后是三本作者为"劳伦·查尔德"的书,然后是其余的李·查尔德的书。
所以本质上我们想给全文搜索优先权并且在类似的搜索结果之前查看那些结果。我们还希望在缺货产品之前显示有货产品。
我们有一个测试服务器,我读了一个论坛帖子,说目前magento拆分搜索查询并显示至少包含一个单词的产品。
我们修改了Mage_CatalogSearch_Model_Mysql4_Fulltext的第342行(对于CE1.4.2):
if ($like) {
$likeCond = '(' . join(' OR ', $like) . ')';
}
并将"OR"改为"and"
路径:app/code/core/Mage/CatalogSearch/Model/Mysql4/Fulltext.php
这是对早期版本的修复,我们目前运行的是1.5.0.1。
是否有一些我错过了修补与Magento搜索结果的相关性,或者你能指出我在代码的正确方向?
要进行AND而不是OR搜索,需要重写
类Mage_CatalogSearch_Model_Resource_Fulltext
方法
public function prepareResult($object, $queryText, $query)
您想要切换部分
$likeCond = '(' . join(' OR ', $like) . ')';
$likeCond = '(' . join(' AND ', $like) . ')';
我认为缺少的"关键"是以下两项:
<action method="setDefaultDirection"><string>desc</string></action>
<action method="setDefaultOrder"><string>relevance</string></action>
你应该能够完成这两个不同的方法…无论哪种情况,您都需要在本地复制上述文件。
1)如果你还没有一个目录,添加一个'catalogsearch.xml'的本地副本
注意: 由于Magento布局是"层叠式"工作的,所以最好先检查一下Magento中可用的"其他"布局目录(除了"base")。例如,在我的例子中,我们使用EE,所以我们先检查'enterprise'布局目录来复制文件,然后再查看'base'目录。
'catalogsearch.xml'的常用位置:
/app/design/frontend/base/default/layout/catalogsearch.xml/app/design/frontend/enterprise/default/layout/catalogsearch.xml注:PE也可能有不同的位置…我不是100%。
2)在'catalogsearch.xml'的'catalogsearch_result_index'部分添加以下内容:
<action method="setDefaultDirection"><string>desc</string></action>
<action method="setDefaultOrder"><string>relevance</string></action>
例如:引用'search_result_list'句柄(即企业布局):
<reference name="search_result_list">
<action method="setDefaultDirection"><string>desc</string></action>
<action method="setDefaultOrder"><string>relevance</string></action>
</reference>
所以它最终看起来类似于:
<catalogsearch_result_index>
...other code
<reference name="search_result_list">
<action method="setDefaultDirection"><string>desc</string></action>
<action method="setDefaultOrder"><string>relevance</string></action>
</reference>
...other code
</catalogsearch_result_index>
或者你可以直接放置在'search_result_list'块中(即基本布局):
<catalogsearch_result_index translate="label">
<label>Quick Search Form</label>
<reference name="root">
<action method="setTemplate"><template>page/3columns.phtml</template></action>
</reference>
<reference name="left">
<block type="catalogsearch/layer" name="catalogsearch.leftnav" after="currency" template="catalog/layer/view.phtml"/>
</reference>
<reference name="content">
<block type="catalogsearch/result" name="search.result" template="catalogsearch/result.phtml">
<block type="catalog/product_list" name="search_result_list" template="catalog/product/list.phtml">
<action method="setDefaultDirection"><string>desc</string></action>
<action method="setDefaultOrder"><string>relevance</string></action>
<block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml">
<block type="page/html_pager" name="product_list_toolbar_pager"/>
</block>
<action method="addColumnCountLayoutDepend"><layout>empty</layout><count>6</count></action>
<action method="addColumnCountLayoutDepend"><layout>one_column</layout><count>5</count></action>
<action method="addColumnCountLayoutDepend"><layout>two_columns_left</layout><count>4</count></action>
<action method="addColumnCountLayoutDepend"><layout>two_columns_right</layout><count>4</count></action>
<action method="addColumnCountLayoutDepend"><layout>three_columns</layout><count>3</count></action>
<action method="setToolbarBlockName"><name>product_list_toolbar</name></action>
</block>
<action method="setListOrders"/>
<action method="setListModes"/>
<action method="setListCollection"/>
</block>
</reference>
</catalogsearch_result_index>
3)确保转储Magento缓存/存储并重新索引。
另一个选择是将它们作为'hidden' form元素放在'form.mini. php '
1)将以下内容放入'form.mini. php '的表单中:
<input type="hidden" name="order" value="relevance">
<input type="hidden" name="dir" value="desc">
现在,form.mini中表单的开头。php '类似于:
<form id="search_mini_form" action="<?php echo $this->helper('catalogsearch')->getResultUrl() ?>" method="get">
<input type="hidden" name="order" value="relevance">
<input type="hidden" name="dir" value="desc">
...other code
2)将路径更改为"form.mini"。在'catalogsearch.xml'中的'default'节('header'引用句柄)内的php '模板:
<default>
<reference name="header">
<block type="core/template" name="top.search" as="topSearch" template="custom_template/catalogsearch/form.mini.phtml"/>
</reference>
... other code
3)确保转储Magento缓存/存储并重新索引。
最后注意…下面是我们设置的"自定义模板"路径结构。位于"企业"目录,所以我的自定义文件将位于:/应用程序/设计//catalogsearch.xml前端/企业/custom_template/布局/app/设计/前端/企业/custom_template/模板/catalogsearch/form.mini.phtml