Проблемы релевантности поисковой системы Magento

В настоящее время у нас есть веб-сайт Magento с большим ассортиментом, и у нас есть некоторые проблемы с релевантностью результатов поиска НА САЙТЕ. В настоящее время мы настроены на «объединение лайков и полнотекста», но результаты не такие, как мы ожидали. Например, при поиске «Ли Чайлд» (автор) появляются три книги Ли Чайлда, затем три книги с автором «Лорен Чайлд», а затем остальные книги Ли Чайлда.

По сути, мы хотим отдать предпочтение полнотекстовому поиску и просматривать эти результаты ПЕРЕД аналогичными результатами поиска. Мы также хотим отображать товары в наличии до того, как их нет в наличии.

У нас есть тестовый сервер, и я прочитал сообщение на форуме, в котором говорилось, что на данный момент magento разделяет поисковый запрос и показывает продукты, в которых есть хотя бы одно из слов.

Мы изменили строку 342 (для CE1.4.2) Mage_CatalogSearch_Model_Mysql4_Fulltext:

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

и замените «ИЛИ» на «И»`

Путь: app/code/core/Mage/CatalogSearch/Model/Mysql4/Fulltext.php

Это исправление для более ранней версии, и в настоящее время мы используем 1.5.0.1.

Есть ли что-то, чего мне не хватает, чтобы возиться с релевантностью результатов поиска Magento, или вы можете указать мне правильное направление в коде?


person WOBenji    schedule 06.09.2011    source источник
comment
Я видел этот вопрос: stackoverflow.com/ вопросов/1953715/ но я не уверен, что Magento сначала отображает наименее релевантные?!   -  person WOBenji    schedule 06.09.2011


Ответы (2)


Чтобы сделать поиск по И вместо ИЛИ, вам нужно будет переписать класс

Mage_CatalogSearch_Model_Resource_Fulltext

В методе

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

вы хотите переключить часть

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

to

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

Обязательно переиндексируйте поисковый индекс после этого, чтобы получить эффект.

person mpaepper    schedule 22.01.2013

Я считаю, что недостающими «ключами» являются следующие два элемента:

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

Вы должны быть в состоянии выполнить это несколькими различными способами... в любом случае вам нужно будет сделать локальные копии указанных файлов.

1) Если у вас его еще нет, добавьте локальную копию 'catalogsearch.xml'

Примечание. Поскольку макеты Magento работают «каскадно», рекомендуется сначала проверить любые «другие» доступные каталоги макетов Magento (кроме «базового»). Например, в моем случае мы используем EE, поэтому мы сначала проверяем каталог макета «предприятие», чтобы скопировать файлы, прежде чем искать в каталоге «база».

Распространенные местоположения «catalogsearch.xml»:

/app/design/frontend/base/default/layout/catalogsearch.xml (в крайнем случае) /app/design/frontend/enterprise/default/layout/catalogsearch.xml (для EE) Примечание. Может быть другое расположение с PE тоже... Я не на 100%.

2) Добавьте следующее в раздел «catalogsearch_result_index» в «catalogsearch.xml»:

<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) Измените путь к шаблону «form.mini.phtml» в разделе «по умолчанию» (ссылочный дескриптор «header») в «catalogsearch.xml»:

<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

Надеюсь, это имеет смысл и помогает.

person JamesD    schedule 22.01.2013