2

現在、大規模な在庫を持つ Magento Web サイトを所有しており、ON SITE 検索結果の関連性に問題があります。現在、「like と fulltext を組み合わせる」ように設定されていますが、結果は期待したものではありません。たとえば、「リー チャイルド」(著者) を検索すると、リー チャイルドの本が 3 冊、次に著者が「ローレン チャイルド」の本が 3 冊、残りのリー チャイルドの本が表示されます。

したがって、基本的には、全文検索を優先して、類似検索結果の前にそれらの結果を表示したいと考えています。また、在庫切れ商品の前に在庫商品を表示したい。

私たちにはテストサーバーがあり、現時点でmagentoが検索クエリを分割し、少なくとも1つの単語を持つ製品を表示すると述べたフォーラムの投稿を読みました.

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 の検索結果の関連性をいじるのに欠けているものはありますか、それともコードの正しい方向を教えてもらえますか?

4

2 に答える 2

0

不足している「鍵」は次の2つの項目だと思います。

<action method="setDefaultDirection"><string>desc</string></action>
<action method="setDefaultOrder"><string>relevance</string></action>

これはいくつかの異なる方法で実行できるはずです...どちらの場合も、前述のファイルのローカルコピーを作成する必要があります。

1)まだ持っていない場合は、「catalogsearch.xml」のローカルコピーを追加します

注: Magentoレイアウトは「カスケード」で機能するため、最初に、使用可能な「他の」Magentoレイアウトディレクトリ(「ベース」以外)を確認することをお勧めします。たとえば、私の場合はEEを使用しているため、「base」ディレクトリを調べる前に、まず「enterprise」レイアウトディレクトリをチェックしてファイルをコピーします。

'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のキャッシュ/ストレージをダンプし、インデックスを再作成してください。

他のオプションは、それらを「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のキャッシュ/ストレージをダンプし、インデックスを再作成してください。

最後の注意... 以下は、セットアップした「カスタムテンプレート」パス構造です。'enterprise'ディレクトリにあるため、カスタムファイルは次の場所にあります:/app/design/frontend/enterprise/custom_template/layout/catalogsearch.xml/app/design/frontend/enterprise/custom_template/template/catalogsearch/form.mini .phtml

これが理にかなっていて、役立つことを願っています。

于 2013-01-22T18:07:50.730 に答える
0

OR ではなく AND 検索を行うには、クラスを書き直す必要があります。

Mage_CatalogSearch_Model_Resource_Fulltext

メソッドでは

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

パートを切り替えたい

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

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

後で検索インデックスを再インデックスして、効果を発揮するようにしてください。

于 2013-01-22T18:02:03.583 に答える