• Главная
  • Поиск
    •  
  • Здравствуйте, Гость

Автор Тема: Поиск  (Прочитано 1436 раз)
  • *
  • Сообщений: 48
« : 30 Август 2016, 21:56:36 »
Всем привет!
Вопрос по поиску объявлений, допустим пользователь пишет в строке поиска "фольксваген пассат запчасти"ему выходит список объявлений где есть хотя бы одно слово, допустим запчасти, а там вообще для трактора, т.е поиск не учитывает "фольксваген пассат" и ищет где есть хотя бы одно слово, как сделать чтобы хоты бы при словосочетании учитывались 2 запроса, коль уж все не хочет, ну или как по другому можно чуть усовершенствовать поиск

  • *
  • Сообщений: 19
  • Михаил Агеев
    • GidON
« Ответ #1 : 31 Август 2016, 15:09:01 »
с тобой согласен, поиск ваще не о чем

  • *
  • Сообщений: 48
« Ответ #2 : 31 Август 2016, 17:12:32 »
Разобрался, в файле вашей темы functions.php вставить :

function cust_refined_pattern_search($params) {

if ($params['sPattern'] != '' && !Session::newInstance()->_get('seeBy')) {
$mSearch = Search::newInstance();
$query_elements = (array) json_decode($mSearch->toJson());

$mSearch->addJoinTable(count($query_elements['tables_join']), sprintf("(SELECT DISTINCT(fk_i_item_id), MATCH(s_title, s_description) AGAINST('%s') AS relevance FROM %st_item_description ) des", $params['sPattern'], DB_TABLE_PREFIX), 'des.fk_i_item_id = '.DB_TABLE_PREFIX.'t_item.pk_i_id', 'INNER' );
$mSearch->addLocale('%');
$mSearch->addGroupBy(DB_TABLE_PREFIX.'t_item.pk_i_id');
$mSearch->order("des.relevance DESC, dt_pub_date", "DESC");
}

Session::newInstance()->_drop('seeBy');
}

osc_add_hook('search_conditions', 'cust_refined_pattern_search');

function cust_alerts_locale_hack_start() {

if (osc_get_osclass_section() == "alerts") {
View::newInstance()->_exportVariableToView('aUserLocale', Session::newInstance()->_get('userLocale'));
Session::newInstance()->_set('userLocale', '%');
}

// Detect See By link
if (Session::newInstance()->_get('seeBy') == '') Session::newInstance()->_set('seeBy', (Params::getParam('seeBy') ? 1 : 0));
Params::unsetParam('seeBy');
}

osc_add_hook('init', 'cust_alerts_locale_hack_start');

function cust_alerts_locale_hack_end($conditions) {

if (osc_get_osclass_section() == "alerts") {
Session::newInstance()->_set('userLocale', View::newInstance()->_get('aUserLocale'));
}

return $conditions;
}

osc_add_filter('sql_search_item_conditions', 'cust_alerts_locale_hack_end');

function cust_seeBy_link_add_identifier() { ?>
<script type="text/javascript">
$(".see_by a").on('click', function(e) {
$(this).prop('href', $(this).prop('href') + '?seeBy=1');
return true;
})
</script>
<?php }

osc_add_hook('footer''cust_seeBy_link_add_identifier');

Оффлайн Dis
  • Admin
  • *****
  • Сообщений: 1110
    • Шаблоны и плагины Osclass
« Ответ #3 : 31 Август 2016, 18:00:27 »
с тобой согласен, поиск ваще не о чем
Поиск в Osclass по умолчанию - по целому слову.
Однако при желании можно изменить.
Пример от san4747 для поиска по фразам.
Есть и доки на https://doc.osclass.org/Fine-Tuning_MySQL_Full-Text_Search_-_Improving_search для поиска по буквам.
« Последнее редактирование: 31 Август 2016, 18:08:38 от Dis »

  • *
  • Сообщений: 4
« Ответ #4 : 02 Январь 2017, 23:58:29 »
У меня вопрос: А как сделать поиск по части слова? чтоб находил не целое слово, а все слова с определенным корнем?????

Оффлайн Dis
  • Admin
  • *****
  • Сообщений: 1110
    • Шаблоны и плагины Osclass
« Ответ #5 : 05 Январь 2017, 04:10:02 »
У меня вопрос: А как сделать поиск по части слова? чтоб находил не целое слово, а все слова с определенным корнем?????
https://osclass.pro/nastrojka-mysql-polnotekstovogo-poiska/

atba2012
  • Гость
« Ответ #6 : 30 Октябрь 2017, 00:38:25 »
Разобрался, в файле вашей темы functions.php вставить :

function cust_refined_pattern_search($params) {

if ($params['sPattern'] != '' && !Session::newInstance()->_get('seeBy')) {
$mSearch = Search::newInstance();
$query_elements = (array) json_decode($mSearch->toJson());

$mSearch->addJoinTable(count($query_elements['tables_join']), sprintf("(SELECT DISTINCT(fk_i_item_id), MATCH(s_title, s_description) AGAINST('%s') AS relevance FROM %st_item_description ) des", $params['sPattern'], DB_TABLE_PREFIX), 'des.fk_i_item_id = '.DB_TABLE_PREFIX.'t_item.pk_i_id', 'INNER' );
$mSearch->addLocale('%');
$mSearch->addGroupBy(DB_TABLE_PREFIX.'t_item.pk_i_id');
$mSearch->order("des.relevance DESC, dt_pub_date", "DESC");
}

Session::newInstance()->_drop('seeBy');
}

osc_add_hook('search_conditions', 'cust_refined_pattern_search');

function cust_alerts_locale_hack_start() {

if (osc_get_osclass_section() == "alerts") {
View::newInstance()->_exportVariableToView('aUserLocale', Session::newInstance()->_get('userLocale'));
Session::newInstance()->_set('userLocale', '%');
}

// Detect See By link
if (Session::newInstance()->_get('seeBy') == '') Session::newInstance()->_set('seeBy', (Params::getParam('seeBy') ? 1 : 0));
Params::unsetParam('seeBy');
}

osc_add_hook('init', 'cust_alerts_locale_hack_start');

function cust_alerts_locale_hack_end($conditions) {

if (osc_get_osclass_section() == "alerts") {
Session::newInstance()->_set('userLocale', View::newInstance()->_get('aUserLocale'));
}

return $conditions;
}

osc_add_filter('sql_search_item_conditions', 'cust_alerts_locale_hack_end');

function cust_seeBy_link_add_identifier() { ?>
<script type="text/javascript">
$(".see_by a").on('click', function(e) {
$(this).prop('href', $(this).prop('href') + '?seeBy=1');
return true;
})
</script>
<?php }

osc_add_hook('footer''cust_seeBy_link_add_identifier');

Добрый день! Реализация поиска по фразам при помощи данного кода значительно улучшила поиск.
Но не подскажите, почему поиск идет только по заголовку и описанию. У меня есть доп. поле "ключевые слова" - он их почему-то не видит.

Заранее благодарен за ответ

Оффлайн Dis
  • Admin
  • *****
  • Сообщений: 1110
    • Шаблоны и плагины Osclass
« Ответ #7 : 31 Октябрь 2017, 03:18:45 »
Но не подскажите, почему поиск идет только по заголовку и описанию. У меня есть доп. поле "ключевые слова" - он их почему-то не видит.
Заранее благодарен за ответ
Используйте Дружественные url, будет искать по доп.полям.

atba2012
  • Гость
« Ответ #8 : 31 Октябрь 2017, 03:34:26 »
Дружественные поля включены с самого  начала, текст из них поиск не видит.....
P. S. Не понимаю, каким образом это может быть связано?

Оффлайн Dis
  • Admin
  • *****
  • Сообщений: 1110
    • Шаблоны и плагины Osclass
« Ответ #9 : 31 Октябрь 2017, 03:47:42 »
Дружественные поля включены с самого  начала, текст из них поиск не видит.....
P. S. Не понимаю, каким образом это может быть связано?
Я у двух человек сравнительно не давно видел, что без ЧПУ не работал поиск с учётом доп.полей.
А на ЧПУ с транслитом работает без проблем. В причины не вникал.

atba2012
  • Гость
« Ответ #10 : 31 Октябрь 2017, 15:06:48 »
Дружественные поля включены с самого  начала, текст из них поиск не видит.....
P. S. Не понимаю, каким образом это может быть связано?
Я у двух человек сравнительно не давно видел, что без ЧПУ не работал поиск с учётом доп.полей.
А на ЧПУ с транслитом работает без проблем. В причины не вникал.
Проверил.... Поиск абсолютно не учитывает информации из доп. полей: номера телефонов (числа), ни слов, не e-mail.
Подскажите, куда смотреть?
P.S. То есть по умолчанию, должна учитываться вся информация находящаяся на странице?

Оффлайн Dis
  • Admin
  • *****
  • Сообщений: 1110
    • Шаблоны и плагины Osclass
« Ответ #11 : 31 Октябрь 2017, 19:51:11 »
MATCH(s_title, s_description) - конечно в этой кастомной функции, которую предложил san4747 и есть причина в Вашем случае, того что поиск идёт только по заголовкам и описанию.

atba2012
  • Гость
« Ответ #12 : 31 Октябрь 2017, 23:00:23 »
MATCH(s_title, s_description) - конечно в этой кастомной функции, которую предложил san4747 и есть причина в Вашем случае, того что поиск идёт только по заголовкам и описанию.
Отключал данную функцию - все ровно поиск не затрагивает доп. поля.  При попытке  редактировать MATCH вообще поиск пропадает... :'(

 


test