Magento搜索引擎相关性问题

时间:2011-09-06 13:32:25

标签: magento search search-engine relevance

我们目前有一个包含大量广告资源的Magento网站,我们遇到了与网站搜索结果相关的一些问题。我们目前设置为“结合喜欢和全文”,但结果不是我们所期望的。例如,搜索“Lee Child”(作者),会出现三本Lee Child书籍,然后出版三本书,作者为“Lauren Child”,然后是其他Lee Child书籍。

基本上我们希望优先考虑全文搜索并在搜索结果之前查看这些结果。我们还希望在缺货产品之前显示库存产品。

我们有一个测试服务器,我读了一篇论坛帖子,说当前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搜索结果相关性的内容,或者您​​能否指出我在代码中的正确方向?

2 个答案:

答案 0 :(得分:0)

要进行AND搜索而不是OR,您需要重写类

Mage_CatalogSearch_Model_Resource_Fulltext

方法

public function prepareResult($object, $queryText, $query)

你想切换部分

$likeCond = '(' . join(' OR ', $like) . ')';

$likeCond = '(' . join(' AND ', $like) . ')';

请务必在之后重新索引搜索索引以产生效果。

答案 1 :(得分:0)

我相信缺少的“钥匙”是以下两项:

<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(用于EE) 注意: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.mini.phtml'中

1)将以下内容放在'form.mini.phtml'中的表单中:

<input type="hidden" name="order" value="relevance">
<input type="hidden" name="dir" value="desc">

现在,'form.mini.phtml'中表单的开头看起来类似于:

<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)在'catalogsearch.xml'中的'default'部分('header'引用句柄)中更改'form.mini.phtml'模板的路径:

<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缓存/存储并重新索引。

最后的说明...... 下面是我们设置的“自定义模板”路径结构。位于“企业”目录中,因此我的自定义文件位于: /app/design/frontend/enterprise/custom_template/layout/catalogsearch.xml /app/design/frontend/enterprise/custom_template/template/catalogsearch/form.mini.phtml

希望这是有道理和有帮助的。