Форум русской поддержки Joomla!® CMS
05.12.2016, 08:35:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Допиливаем Умный поиск в Joomla 2.5 (русский парадигматический стеммер для Joomla)

 (Прочитано 8448 раз)
0 Пользователей и 1 Гость смотрят эту тему.
stt
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 50


« : 09.09.2012, 21:49:44 »

Здравствуйте, уважаемые. На днях у меня встала задача к самописному компоненту приделать поиск. Хороший поиск. Быстрый и с русским морфологическим разбором. Можно, конечно, подключить поиск от Яндекс или Google, но это запасной вариант. Тем более, что сайт еще только в локальном варианте и на каком доменном имени он будет висеть, еще заказчик не определился.
Знакомство с Умным поиском в Joomla порадовало. Но не очень. Порадовало, что прикрутить его к своему компоненту оказалось не сложно. Нужно взять один из плагинов в папке plugins\finder\ и переписать под свой компонент. На этом моменте я останавливаться не буду, потому как это очень зависит от того компонента, к которому прикручивается умный поиск. Хотя, если появятся желающие узнать подробности, то постараюсь ответить. Те плагины, которые уже установлены в Joomla, позволяют использовать Умный поиск в материалах, категориях, контактах, web-ссылках и лентах новостей.
А что же меня не порадовало? А собственно то, что никакой морфологический разбор для русского языка в Joomla не предусмотрен. Какое ввели слово, такое слово и будет искать.
Поиски в интернете стеммера для русского языка дали обнадеживающие результаты. Нашлось несколько стеммеров Портера для русского языка. Ядро у них всех было одинаковым, видимо автор один. К сожалению, я не знаю имени автора, но в любом случае ему спасибо. Я взял стеммер для Wordpress и переписал его для Joomla.
Ссылка на файл porter_ru.php: http://redozator.ru/files/porter_ru.zip. Чтобы его установить, нужно:
1. Поместить его в папку administrator\components\com_finder\helpers\indexer\stemmer\
2. В файле administrator\components\com_finder\config.xml ищем описание поля stemmer и вставляем строчку
Код:
<option value="porter_ru">rus stemmer</option>
В версии Joomla 2.5.6 это 201-я строка файла config.xml.
3. В админ. панели, в настройках умного поиска выбираем в поле Парадигматический модуль наш новый стеммер rus stemmer.

"И чо?" - скажите вы, - "почему не работает?". Я сам удивлен! Действительно не работает. Точнее работает, но кое-как. Пришлось копать глубже в код компонента умного поиска. Без хака не обошлось.

4. Открываем файл administrator\components\com_finder\helpers\indexer\query.php и изменяем строку 1305
было:
Код:
$query->where('t.term = ' . $db->quote($token->term));
стало:
Код:
$query->where('(t.term = ' . $db->quote($token->term). ' OR t.stem = ' . $db->quote($token->stem). '  OR t.stem = ' . $db->quote($token->term). ')');
5. Проверяем работу.
6. Задаем мне вопросы, если что-то не понятно.
« Последнее редактирование: 28.02.2015, 22:45:22 от b2z » Записан
stt
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 50


« Ответ #1 : 10.09.2012, 07:41:10 »

Почему Joomla так гнобят все теперь понятно...
зачем лезть в ядро? почему не написать плагин?!
Ну это не совсем ядро Joomla - это компонент com_finder. Основную логику поиска не заменить плагином. Если очень хочется оставить Joomla и ее стандартные компоненты в неприкосновенности, то нужно полностью переписать com_finder, переименовать его и установить в системе, как дополнительный умный поиск.
Записан
stt
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 50


« Ответ #2 : 12.09.2012, 08:18:04 »

А вы обновите Joomla и посмотрите или это не совсем ядро... и кстати после радости com_finder у вас осталась радость  от ужасно разросшейся базы данных и в разы замедлившейся скорости работы Joomla?
Про ужасно разросшуюся базу данных на форуме уже поднимался вопрос. Повторяться не будем. Для доски объявлений в пару сотен двух-трехстрочных объявлений умный поиск очень даже приемлем. От себя могу сказать, что умный поиск нужно использовать либо на маленьких объемах информации либо на о-очень больших.
Записан
stt
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 50


« Ответ #3 : 13.09.2012, 11:52:42 »

на очень больших база будет весить оооооочееень много!
Не согласен. Количество слов и фраз в языке ограничено, поэтому на очень больших базах прирост индексных файлов при добавлении новых статей будет совсем небольшим.
Записан
stt
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 50


« Ответ #4 : 19.09.2012, 11:11:50 »

у база с 30 материалами и базой размером в 500 килобайт после индексации умным поиском разросталасьдо 20 метров.. сколько будет весить база если про индексировать 1000 статей?
1000 статей - это не "очень большой объем". Я бы все-таки отнес это количество к среднему объему. По очень приблизительным подсчетам, эффективность умного поиска можно ждать на нескольких десятках тысяч статей объемом 1К - 5К символов каждая.
Записан
Ivan13
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 1


« Ответ #5 : 19.02.2013, 23:08:02 »

"Знакомство с Умным поиском в Joomla порадовало. Но не очень. Порадовало, что прикрутить его к своему компоненту оказалось не сложно. Нужно взять один из плагинов в папке plugins\finder\ и переписать под свой компонент."

Здравствуйте, подскажите пожалуйста как это сделать это чтобы поиск работал в VirtueMart
Записан
stt
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 50


« Ответ #6 : 19.02.2013, 23:55:43 »

"Знакомство с Умным поиском в Joomla порадовало. Но не очень. Порадовало, что прикрутить его к своему компоненту оказалось не сложно. Нужно взять один из плагинов в папке plugins\finder\ и переписать под свой компонент."

Здравствуйте, подскажите пожалуйста как это сделать это чтобы поиск работал в VirtueMart

Ответил в почту.
Записан
oleg8800
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 84


« Ответ #7 : 01.05.2013, 11:18:47 »

Здравствуйте, подскажите пожалуйста как это сделать чтобы поиск работал в JoomShopping.  ! !
Буду очень благодарен!
Записан
stt
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 50


« Ответ #8 : 02.05.2013, 20:24:58 »

С JoomShopping не работал, поэтому ничего не подскажу.
Записан
oleg8800
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 84


« Ответ #9 : 05.05.2013, 11:15:58 »

напишите тогда хоть для VirtueMart, если это возможно)))))))))))
Записан
stt
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 50


« Ответ #10 : 05.05.2013, 12:13:56 »

напишите тогда хоть для VirtueMart, если это возможно)))))))))))
Если вам нужен просто пример реализации, то в папке plugins\finder есть несколько плагинов. Различия в основном в функциях getListQuery.
Записан
oleg8800
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 84


« Ответ #11 : 06.05.2013, 11:01:30 »

если можно, подробнее.или пример   
Записан
Em1pty
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 1


« Ответ #12 : 10.05.2013, 13:02:38 »

Подскажите по Virtuemаrt. как "умный поиск" jooml'ы заставить по нему работать?
Записан
stt
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 50


« Ответ #13 : 10.05.2013, 19:09:34 »

Подскажите по Virtuemаrt. как "умный поиск" jooml'ы заставить по нему работать?

Как я уже сказал, "Нужно взять один из плагинов в папке plugins\finder\ и переписать под свой компонент". Далее возможно два варианта:

1. Вы не знакомы с php, MySQL и разработкой под Joomla. В этом случае вам нужна не помощь - вам нужен готовый плагин. Это только за вознаграждение.
2. Вы уже что-то разрабатывали под Joomla и имеете какие-то навыки. Вы попробовали переписать плагин, но что-то у вас не получилсь. Тогда пришлите мне свой вариант плагина, я подскажу что вы недоработали и где ошиблись.
Записан
romans13
Осваиваюсь на форуме
***

Репутация: +4/-0
Offline Offline

Пол: Мужской
Сообщений: 125


Присоединяюсь к вышеВЫсказанному


« Ответ #14 : 15.05.2013, 09:58:35 »

Это только за вознаграждение.... согласен на все сто Azn умственный труд должен оплачиваться Cool
Записан
oleg8800
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 84


« Ответ #15 : 20.05.2013, 08:59:14 »

Сколько будет стоить плагин для JoomShopping?
Записан
Bismuth
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 141



« Ответ #16 : 21.09.2013, 13:21:04 »

6. Задаем мне вопросы, если что-то не понятно.

Здравствуйте!
Конечно спасибо, после этого без труда проиндексировал все 3000 стр. но при воде поиск на сайте выдает одно и тоже (Вы имели в виду: хелли?) Хоть в админке поиск работает как надо

в чем причина я не могу понять((
Записан
DimonSX
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 17



« Ответ #17 : 28.09.2013, 06:40:09 »

5. Проверяем работу.
6. Задаем мне вопросы, если что-то не понятно.

Доброго времени!
Все работает хорошо, только вот почему-то не выделяет более одного слова...
- можно ли как-то это подправить...?!
Записан
ChaosHead
Профи
********

Репутация: +381/-10
Offline Offline

Пол: Мужской
Сообщений: 4388



« Ответ #18 : 06.09.2014, 09:16:03 »

Ссылка битая в первом посте
Записан
stt
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 50


« Ответ #19 : 06.09.2014, 13:57:00 »

Ссылка битая в первом посте
Исправил ссылку
Записан
ChaosHead
Профи
********

Репутация: +381/-10
Offline Offline

Пол: Мужской
Сообщений: 4388



« Ответ #20 : 21.02.2015, 12:52:15 »

$query->where('(t.term = ' . $db->quote($token->term). ' OR t.stem = ' . $db->quote($token->stem). '  OR t.stem = ' . $db->quote($token->term). ')');
Проверяю в Joomla 3.3.6 работает без этого хака. Не совсем понимаю зачем он нужен был?

Вот тут человек вносит в алгоритм небольшие изменения, поддерку суффиксов "ок", "ек". По слову "дружки" будет находиться "дружок" и подобное.
« Последнее редактирование: 21.02.2015, 13:13:01 от ChaosHead » Записан
kryglik
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 1


« Ответ #21 : 04.04.2015, 02:32:33 »

Добрый времени суток!
Возникла такая не хорошая ситуэйшен. Как бы я не старался включить отображение "умного поиска" в выпадающем меню "Компоненты". У меня ни как не выходит... Сколько раз я перезапустил плагины и модули... сколько файлов я перезалил на ftp просто не счесть... Уже даже немного руки опустил=( Подскажите может я не туда смотрю или не то юзаю ? Буду очень признателен!
Записан
isay777
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 41



« Ответ #22 : 06.05.2015, 23:02:38 »

в Joomla 3.3.4
вот эту часть не могу сделать
Цитировать
4. Открываем файл administrator\components\com_finder\helpers\indexer\query.php и изменяем строку 1305
было:
Код:
$query->where('t.term = ' . $db->quote($token->term));
стало:
Код:
$query->where('(t.term = ' . $db->quote($token->term). ' OR t.stem = ' . $db->quote($token->stem). '  OR t.stem = ' . $db->quote($token->term). ')');
5. Проверяем работу.

кто нибудь прописывал?
Записан
ChaosHead
Профи
********

Репутация: +381/-10
Offline Offline

Пол: Мужской
Сообщений: 4388



« Ответ #23 : 06.05.2015, 23:19:12 »

В версиях выше 3.3.6 - 3.4.0 мне эта часть не понадобилась. Работает без неё, как я написал выше. На меньших не пробовал.
« Последнее редактирование: 07.05.2015, 01:13:14 от ChaosHead » Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet