Comments 39
Если честно, из статьи не совсем понятно — зачем собственно реализовывать с нуля все фичи поиска, а не воспользоваться хотя бы теми же Sphinx, Solr или другими? Это и проще, и быстрее работает, и имеет больше полезных фич.
Дело в том, что не каждый shared-хостинг позволяет запустить Sphinx или Apache Solar.
По-моему если вам нужен поиск с морфологией — можно и купить VDS, цены соразмерны с хостингом.
Да госпади, какая разница, платить за шаред за 4 бакса или за VDS за 5?
На самом деле писать новый поисковый движок не всегда бессмысленная затея. Например, вроде бы whoosh на питоне написан по такой же причине — не было хорошей pure-python версии. Сейчас же это полноценный и достаточно легко расширяемый движок с хорошей производительностью, пусть в чём-то и уступает гигантам вроде Solr или Elasticsearch. Зато его можно использовать в любом месте, где есть интерпретатор питона, то есть практически везде, без установки монстра-java. Да и для расширения функциональности нужно знать только питон.

Вы бы только эту причину почётче указали в статье, а то действительно после прочтения она не совсем ясна.
Да при чём тут язык. Петрович, например, частную задачу решает на многих языках.
ejabberd вообще крут неимоверно :)
А что «язык не позволяет» — это всё отмазки.
Не очень понял, в чем трудности установки «монстра-с-Явы».

sudo apt-get install default-jre
Ну например у меня ни на ноуте, ни на VPS java сейчас не установлена — питон же есть всегда, в любом адекватном дистрибутиве. Как минимум распространённость — уже весомый фактор, если выбирать библиотеку для поиска (особенно если не веб-приложение, а предполагается запуск программы у пользователей). Также скорее всего в java-движках больше накладные расходы по памяти (по опыту использования других программ на яве), что может быть важно в случае небольших коллекций. Да и более лёгкая расширяемость (если знать питон) тоже важна.

«Питон» здесь можно заменить на другой язык, в частности php, который явно распространён гораздо больше чем java на веб-серверах.
А у меня на ноуте, маке и VPS java есть, а питона нет.
Ваша выборка из себя самого не репрезентативна, вы это понимаете?
Как я написал в самом начале, про себя я пишу именно «например». Главное же — в любом дистрибутиве линукса питон есть сразу, а вот java намного реже встречается.

И конечно я никак отрицаю того, что по функциональности и скорости на больших объёмах данных движки на java наверное впереди (не зря же их разрабатывают дольше и большими командами :) ) — соответственно, в случае когда это всё нужно, придётся использовать их.
Выбор инструмента потому что «он уже есть в дистрибутиве» — плохо. Нужно выбирать инструмент под задачу.
К слову, «в любом адекватном дистрибутиве» есть PHP, Perl, Python, RoR, например.
Да, я про это и говорю — а java обычно нет :) Питон привёл просто в качестве примера.
Переходить на более медленный и не гибкий инструмент только потому, что он написан на native-языке — плохой вариант.

java устанавливается за 2 минуты, это я уже писал. К тому же sphinx, lucene/solr/elasticsearch есть библиотеки на native-языках, если не нравится можно написать свою и работать через REST.
Как академическая тренировка в разработке ПО — это замечательно. Но если речь про бизнес-задачу, не понятно, почему не был использован тот же Sphinx. Да, он не заведётся на shared-хостинге, но виртуалка у того же Digital ocean за $5/месяц (что сравнимо со стоимостью российского shared-хостинга) позволяет с одной стороны вполне комфортно ему там работать, а с другой стороны не тратить человеко-часов на программирование того, что уже существует.
Вы много хотите. У студентов сессия нынче (и вылеты за неуспеваемость), вот они тут и копипастят что найдут на просторах. Сейчас такая волна начнётся, этот пост ещё мелочь, первая ласточка :)
Я согласен с raskumandrin, данное решение не годится для бизнеса, но для небольшого сайта на недорогом хостинге вполне в самый раз. Не обязательно писать все с нуля — никто не запрещает взять готовый движок из репозитория и воспользоваться им. В статье я рассказал принципы работы данного движка, а именно путь его создания с нуля. А насчет «копипастинга», все, кроме phpMorphy, было написано мной, если Вы не согласны, буду рад увидеть ссылку на «копируемый» мной ресурс.
В статье я рассказал принципы работы данного движка
То есть переписали документацию и примеры из неё.
Ну, для начала, это тоже неплохо — многие и этого не делают :-)
Переписал откуда? Вы внимательно прочитали мой ответ?
… все, кроме phpMorphy, было написано мной...
А, то есть докментцию к морфи, и примеры, вы не читали, написали свои?
Разумеется, читал. Вас может удивить, но документация и примеры phpMorphy показывают, как выполнять морфологический анализ с помощью данной библиотеки, но не полнотекстовый поиск по сайту.
У многих поисковиков есть поиск по сайту. Я сделал ссылки на них. Некоторые сбрасывают настройки после первого запроса. Сайт не большой и контент меняется не часто.
Было бы гораздо интереснее глянуть на результаты поиска, то есть что искали и что получили в результате поиска + время выполнения этого поиска, ибо как-то по коду трудно понять насколько качественно оно ищет.
Что-то я не понял, какое-то странное индексирование — всё равно нужно прочитать все записи из базы и с каждым отдельно проверять. Скорость будет, конечно, быстрее, чем LIKE "%$search%", но гораздо медленнее нормального индекса.

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

Хотя, если в базе с пяток текстов, то можно и LIKE-ом обойтись. А так — половинчатое решение.
Интересная статься, спасибо.
Как я понял вы выложили код на github что бы, все смогли использовать его как библиотеку. И в связи с этим возникает два вопроса:
1. Почему не используется автозагрузка? И из этого вопрос по названиям классов, почему не PSR-0, а лучше PSR-4?
2. Где тесты?
1) Учимся создавать ишусы на гитхабе и пулреквесты если сильно так глаз коребит. Можно даже composer пакет сделать и вынести phpmorphy отдельно
2) Смотрим код, отвечаем на свой же вопрос.

Я так понимаю что автор это добро больше как пример выкладывал. Не более того.
Спасибо. Да, код на GitHub является небольшой библиотекой, которую дорабатываю в свободное время. Цель — pure-PHP библиотека для поиска и индексирования. Как и советовал Fesor, теперь это composer-пакет с автозагрузкой классов по стандарту PSR-4. Тесты в процессе разработки…
Кстати, если уж надо полностью PHP-решение, то есть порт Lucene в виде Zend_Search, и там достаточно много возможностей, можно использовать как самостоятельный компонент.
Неплохое решение для небольших сайтов, сделать тесты на скорость и релевантность, и будет следующая статья.
Да, еще добавить в ранжирование тф*идф для повышения релевантности.
Насчет TF-IDF, спасибо, в свободное время модифицирую алгоритм ранжирования. Тесты будут обязательно.
В планах добавить туда еще кучу всяких возможностей,
Вопрос: судя по количеству и датам коммитов, проект заглох? Или все-таки будет еще развиваться?
P.S. За статью спасибо!
Не то, что бы заглох, скорее поставлен на паузу. Сейчас занимаюсь несколькими другими проектами, по завершении которых постараюсь вернуться к этому.
Only those users with full accounts are able to leave comments. Log in, please.