Проблемы релевантности поисковой системы Magento - PullRequest
2 голосов
/ 06 сентября 2011

В настоящее время у нас есть веб-сайт 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, или вы можетеуказать мне правильное направление в коде?

Ответы [ 2 ]

0 голосов
/ 22 января 2013

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

<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_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

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

0 голосов
/ 22 января 2013

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

Mage_CatalogSearch_Model_Resource_Fulltext

В методе

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

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

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

до

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

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

...