Pull to refresh

Comments 39

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

Вы бы только эту причину почётче указали в статье, а то действительно после прочтения она не совсем ясна.
UFO just landed and posted this here
Не очень понял, в чем трудности установки «монстра-с-Явы».

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-хостинга) позволяет с одной стороны вполне комфортно ему там работать, а с другой стороны не тратить человеко-часов на программирование того, что уже существует.
UFO just landed and posted this here
Я согласен с raskumandrin, данное решение не годится для бизнеса, но для небольшого сайта на недорогом хостинге вполне в самый раз. Не обязательно писать все с нуля — никто не запрещает взять готовый движок из репозитория и воспользоваться им. В статье я рассказал принципы работы данного движка, а именно путь его создания с нуля. А насчет «копипастинга», все, кроме phpMorphy, было написано мной, если Вы не согласны, буду рад увидеть ссылку на «копируемый» мной ресурс.
UFO just landed and posted this here
Переписал откуда? Вы внимательно прочитали мой ответ?
… все, кроме phpMorphy, было написано мной...
UFO just landed and posted this here
Разумеется, читал. Вас может удивить, но документация и примеры phpMorphy показывают, как выполнять морфологический анализ с помощью данной библиотеки, но не полнотекстовый поиск по сайту.
У многих поисковиков есть поиск по сайту. Я сделал ссылки на них. Некоторые сбрасывают настройки после первого запроса. Сайт не большой и контент меняется не часто.
Было бы гораздо интереснее глянуть на результаты поиска, то есть что искали и что получили в результате поиска + время выполнения этого поиска, ибо как-то по коду трудно понять насколько качественно оно ищет.
UFO just landed and posted this here
Что-то я не понял, какое-то странное индексирование — всё равно нужно прочитать все записи из базы и с каждым отдельно проверять. Скорость будет, конечно, быстрее, чем 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. За статью спасибо!
Не то, что бы заглох, скорее поставлен на паузу. Сейчас занимаюсь несколькими другими проектами, по завершении которых постараюсь вернуться к этому.
И о проекте не слуху ни духу… Даже печально.
Sign up to leave a comment.

Articles