[Решено] Поиск по части слова

Прислано: aniv

чт, 26/03/2009 - 12:17

Использую стандартный модуль поиска. Но он ищет только целые слова. Как сделать так, чтобы поиск производился и по частям слов (подсловам)? Т.е. например пользователь вводит только начало слова или конец или середину.

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано aniv в ср, 01/04/2009 - 17:46.

никто не откликнулся и готового подходящего решения я не нашел, поэтому сам модифицировал стандартную функцию поиска и теперь у меня работает поиск по любой части слова


Опубликовано Dark_kz в ср, 01/04/2009 - 18:29.

почему бы вам не выложить решение


Опубликовано Serg_M в ср, 08/04/2009 - 07:11.

"Dark_kz" написал(а):

сам модифицировал стандартную функцию поиска и теперь у меня работает поиск по любой части слова

Больше похоже на хваставство. Вы или привидите решение или сотрите [Решено] в заголовке...


Опубликовано aniv в вс, 26/04/2009 - 15:05.

Когда я писал первое сообщение в этой теме, то не мог привести решение. Хотел его выложить позже, но было много дел и я забыл про это. Так что приведу решение сейчас, надеюсь кому-нибудь еще оно поможет.

Для начала надо сделать кое-какие изменения в файле search.module

найдите строку
$query2 = substr(str_repeat("i.word = '%s' OR ", count($arguments2)), 0, -4);
и измените ее на
$query2 = substr(str_repeat("i.word LIKE '%%%s%%' OR ", count($arguments2)), 0, -4);

затем строку
$boundary = '(?:(?<=['. PREG_CLASS_SEARCH_EXCLUDE . PREG_CLASS_CJK .'])|(?=['. PREG_CLASS_SEARCH_EXCLUDE . PREG_CLASS_CJK .']))';
исправить на
$boundary = '';

потом найдите
if (count($ranges) == 0) {
return truncate_utf8($text, 256) .' ...';
}
и приведите к виду
if (count($ranges) == 0) {
return "bad";
}

в этом файле больше не надо делать какие-то еще изменения, теперь нам нужен node.module

найдите строку
$extra = node_invoke_nodeapi($node, 'search result');
и после нее добавьте
$snip=search_excerpt($keys, $node->title.$node->body);
if($snip!="bad")
{

строчку
'snippet' => search_excerpt($keys, $node->body),
измените на
'snippet' => $snip,

и теперь осталось только добавить } перед строкой return $results;

Вроде бы ничего не забыл.
Решение может быть и не самое лучшее и изящное, но пока оно меня устраивает.


Опубликовано compawa в чт, 30/04/2009 - 13:31.

Если node.module не трогать еще лучше работает...


Опубликовано compawa в пт, 01/05/2009 - 02:24.

aniv, а Вы не сможете выбрать время для отправки патча разработчикам?


Опубликовано sva в пт, 01/05/2009 - 17:28.

Решение работает. Хотя расстраивает здесь то, что при каждом обновлении версии надо будет не забыть поправить модуль.


Опубликовано aniv в пн, 04/05/2009 - 17:22.

compawa, я еще ни разу не отправлял патчи и не знаю в какой форме и как их надо отправлять


Опубликовано Dark_kz в пн, 04/05/2009 - 18:41.

Спасибо. Полезно


Опубликовано NataD в вт, 26/05/2009 - 09:38.

Я новичок, сделала как описано, спасибо большое, aniv, все работает.
А можно ли это реализовать в пользовательских модулях, чтобы не корректировать стандартые модули после обновления версии?

NataD


Опубликовано jin123 в пн, 03/08/2009 - 16:03.

отлично работает, но почти не ищет в каталоге Ubercart (товары), а там больше всего надо :(


Опубликовано aniv в чт, 13/08/2009 - 16:38.

у меня тоже стоит уберкарт и поиск по товарам нормально работает


Опубликовано Izem в чт, 13/08/2009 - 16:58.

Уважаемые гуры! Не оставьте нас, сирых, отправьте, пжл, этот патч разработчикам. Ну, не умеем мы (не все же монстры программирования)! :) Представляете, скольким людям доброе дело сделаете... Спасибо!


Опубликовано ibest в пн, 14/09/2009 - 19:07.

заметил один забавный баг: вводим в поиск 0 (ноль) и ... не получаем ничего ))) даже сообщения что ничего не найдено

а ещё когда результаты поиска не помещаются на одну страницу, кликаем по последней странице и иногда получаем сообщение "ничего не найдено" ... точно не понял в каких случаях так получается


Опубликовано chup в пт, 24/12/2010 - 12:13.

Все работает. Спасибо!
Для себя и всех тех кому лень делать изменения ручками сделал патч-файл (см. приложенный файл).


Опубликовано av_burnatseva в ср, 29/06/2011 - 11:14.

большое спасибо очень пригодилось


Опубликовано av_burnatseva в ср, 29/06/2011 - 11:14.

большое спасибо очень пригодилось


Опубликовано taciturn_ в пн, 01/08/2011 - 17:48.

aniv, Вы могли бы поколдовать и для D7?


Опубликовано maix в пн, 28/11/2011 - 05:08.

Уважаемые Гуру просвятите с решением для Drupal 7


Опубликовано makkon в ср, 30/11/2011 - 08:44.

drupal 6:
for english letters: http://drupal.org/project/porterstemmer
для русских: http://drupal.org/project/rustemmer

drupal 7 портирование модуля rustemmer: http://drupal.org/node/1034298


Опубликовано sas@drupal.org в вт, 03/01/2012 - 10:02.

Порт rustemmer под 7-ку http://drupal.org/node/1034298#comment-4753064


Опубликовано KonstS в вт, 17/01/2012 - 05:49.

Может кто посмотрит знающий в конце вот этой темы поиск в друпал вопрос возник. Перерыл все что можно не могу найти ответ.


Новое на сайте

Ссылки партнёров