Я создаю сайт Django и ищу поисковик.
Несколько кандидатов:
Люцен / Люцен с Компасом / Солр
сфинкс
Postgresql встроенный полнотекстовый поиск
MySQl встроенный полнотекстовый поиск
Критерий отбора:
- релевантность результата и рейтинг
- скорость поиска и индексации
- простота использования и простота интеграции с Django
- требования к ресурсам - сайт будет размещен на VPS , поэтому в идеале поисковой системе не потребуется много оперативной памяти и процессора
- масштабируемость
- дополнительные функции, такие как «Вы имели в виду?», связанные поиски и т. д.
Любой, кто имел опыт работы с поисковыми системами выше или другими двигателями, которых нет в списке - я хотел бы услышать ваше мнение.
РЕДАКТИРОВАТЬ: Что касается потребностей в индексации, так как пользователи продолжают вводить данные на сайт, эти данные должны быть проиндексированы непрерывно. Это не должно быть в режиме реального времени, но в идеале новые данные должны отображаться в индексе с задержкой не более 15-30 минут.
mysql
postgresql
full-text-search
lucene
sphinx
продолжение
источник
источник
Tsearch
не поддерживает поиск по фразе. Тем не менее, он находится в списке TODO sai.msu.su/~megera/wiki/FTS_Todo .Ответы:
Приятно видеть, что кто-то говорит о Lucene - потому что я понятия не имею об этом.
Сфинкс, с другой стороны, я хорошо знаю, поэтому посмотрим, смогу ли я чем-нибудь помочь.
Я понятия не имею, насколько это применимо к вашей ситуации, но Эван Уивер сравнил несколько общих параметров поиска Rails (Sphinx, Ferret (порт Lucene для Ruby) и Solr), выполняя некоторые тесты. Может быть полезно, я думаю.
Я не изучал глубины полнотекстового поиска MySQL, но я знаю, что он не конкурирует ни по скорости, ни по характеристикам со Sphinx, Lucene или Solr.
источник
Я не знаю Sphinx, но что касается Lucene и полнотекстового поиска в базе данных, я думаю, что производительность Lucene не имеет себе равных. Вы сможете выполнять почти любой поиск менее чем за 10 мс, независимо от того, сколько записей вам нужно искать, при условии, что вы правильно настроили свой индекс Lucene.
Здесь возникает самое большое препятствие: лично я думаю, что интегрировать Lucene в ваш проект нелегко . Конечно, это не так сложно настроить, чтобы вы могли выполнить базовый поиск, но если вы хотите получить максимальную отдачу от него с оптимальной производительностью, то вам определенно нужна хорошая книга о Lucene.
Что касается требований к ЦП и ОЗУ, выполнение поиска в Lucene не требует слишком больших нагрузок на ЦП, хотя индексация данных выполняется, хотя вы делаете это не слишком часто (возможно, один или два раза в день), так что это не так. большая часть препятствия.
Он не отвечает на все ваши вопросы, но вкратце: если у вас есть много данных для поиска, и вы хотите отличную производительность, то я думаю, что Lucene - определенно правильный путь. Если у вас не будет большого количества данных для поиска, то вы можете также использовать полнотекстовый поиск в базе данных. Настройка полнотекстового поиска MySQL определенно проще в моей книге.
источник
Я удивлен, что больше нет информации о Solr. Solr очень похож на Sphinx, но имеет более продвинутые функции (AFAIK, поскольку я не использовал Sphinx - только читал об этом).
Ответ по ссылке ниже детализирует несколько вещей о Сфинксе, который также относится к Solr. Сравнение полнотекстового поискового движка - Lucene, Sphinx, Postgresql, MySQL?
Solr также предоставляет следующие дополнительные функции:
Кстати, есть еще множество функций; Тем не менее, я перечислил только те функции, которые я фактически использовал в производстве. Кстати, из коробки MySQL поддерживает # 1, # 3 и # 11 (ограничено) в списке выше. Для функций, которые вы ищете, реляционная база данных не собирается сокращать ее. Я бы сразу их ликвидировал.
Кроме того, еще одним преимуществом является то, что Solr (ну, на самом деле, Lucene) является базой данных документов (например, NoSQL), поэтому многие преимущества любой другой базы данных документов могут быть реализованы с помощью Solr. Другими словами, вы можете использовать его не только для поиска (например, производительности). Проявите творческий подход с этим :)
источник
Apache Solr
Помимо ответов на вопросы OP, позвольте мне рассказать немного об Apache Solr, от простого ознакомления с подробным описанием установки и реализации .
Solr не должен использоваться для решения проблем в реальном времени. Для поисковых систем Solr в значительной степени игра и работает без нареканий .
Solr отлично работает на веб-приложениях с высоким трафиком ( я где-то читал, что он не подходит для этого, но я подтверждаю это утверждение ). Он использует оперативную память, а не процессор.
Подталкивание помогает ранжировать ваши результаты показывают на вершине. Скажем, вы пытаетесь найти имя джон в полях FirstName и LastName , и вы хотите , чтобы уместность в ПгвЬЫате поле, то вам необходимо увеличить вверх ПгвЬЫате поле , как показано.
Как вы можете видеть, Firstname поле увеличил с 2 балла.
Подробнее о SolrRelevancy
Скорость невероятно высока и без компромиссов. Причина, по которой я перешел на Solr .
Что касается скорости индексации, Solr также может обрабатывать JOINS из таблиц вашей базы данных. Более высокое и сложное JOIN влияет на скорость индексации. Тем не менее, огромная конфигурация оперативной памяти может легко справиться с этой ситуацией.
Чем выше оперативная память, тем выше скорость индексации Solr.
Никогда не пытался интегрировать Solr и Django , однако вы можете добиться этого с Haystack . Я нашел несколько интересных статей на эту же тему, и вот вам github .
Solr размножается на RAM, поэтому, если RAM высока, вам не нужно беспокоиться о Solr .
Использование ОЗУ Solr резко возрастает при полной индексации, если у вас есть несколько миллиардов записей, вы можете разумно использовать импорт Delta для решения этой ситуации. Как уже говорилось, Solr - это решение , которое можно использовать только в режиме реального времени .
Solr отлично масштабируется. Посмотрите на SolrCloud . Некоторые ключевые особенности этого.
Для описанного выше сценария вы можете использовать SpellCheckComponent, который упакован с Solr . Есть много других функций, SnowballPorterFilterFactory помогает извлекать записи, например, если вы печатаете, книги вместо книги , вам будут представлены результаты, связанные с книгой .
Этот ответ широко посвящен Apache Solr и MySQL . Джанго выходит за рамки.
Предполагая, что вы находитесь в среде LINUX, вы можете перейти к этой статье дальше. (у меня была версия Ubuntu 14.04)
Начиная
Скачать Apache Solr из здесь . Это будет версия 4.8.1 . Вы можете скачать новые версии, я нашел эту стабильную.
После загрузки архива распакуйте его в папку по вашему выбору. Скажи ..
Downloads
или как угодно .. Так это будет выглядетьDownloads/solr-4.8.1/
По вашему запросу. Перейдите в каталог
shankar@shankar-lenovo: cd Downloads/solr-4.8.1
Так что теперь вы здесь ..
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1$
Запустите сервер приложений Jetty
Jetty доступен в папке примеров
solr-4.8.1
каталога, поэтому перейдите в нее и запустите сервер приложений Jetty.shankar@shankar-lenovo:~/Downloads/solr-4.8.1/example$ java -jar start.jar
Теперь не закрывайте терминал, сверните его и оставьте в стороне.
Чтобы проверить, работает ли Apache Solr успешно, перейдите по этому URL в браузере. HTTP: // локальный: 8983 / Solr
Запуск Jetty на пользовательском порту
Он работает на порту 8983 по умолчанию. Вы можете изменить порт либо здесь, либо непосредственно внутри
jetty.xml
файла.java -Djetty.port=9091 -jar start.jar
Загрузите JConnector
Этот файл JAR действует как мост между MySQL и JDBC. Загрузите независимую от платформы версию здесь
После загрузки извлеките папку, скопируйте
mysql-connector-java-5.1.31-bin.jar
и вставьте ее в каталог lib .shankar@shankar-lenovo:~/Downloads/solr-4.8.1/contrib/dataimporthandler/lib
Создание таблицы MySQL для связи с Apache Solr
Чтобы использовать Solr , вам нужно иметь несколько таблиц и данных для поиска. Для этого мы будем использовать MySQL для создания таблицы и добавления некоторых случайных имен, а затем мы можем использовать Solr для подключения к MySQL и индексирования этой таблицы и ее записей.
Структура 1.Table
2. Заполните приведенную выше таблицу
Попасть внутрь ядра и добавить директивы lib
1. Перейдите к
2. Модификация solrconfig.xml
Добавьте эти две директивы в этот файл ..
Теперь добавьте DIH (обработчик импорта данных)
3. Создайте файл db-data-config.xml
Если файл существует, тогда игнорируйте, добавьте эти строки в этот файл. Как видно из первой строки, вам необходимо предоставить учетные данные вашей базы данных MySQL . Имя базы данных, имя пользователя и пароль.
4. Изменить файл schema.xml.
Добавьте это в свой schema.xml, как показано ..
индексирование
Вот где настоящая сделка. Вам нужно выполнить индексацию данных из MySQL в порядок Solr, чтобы использовать Solr Queries.
Шаг 1. Перейдите в админ-панель Solr.
Нажмите на ссылку http: // localhost: 8983 / solr в своем браузере. Экран открывается так.
Как показывает маркер, перейдите в раздел « Ведение журнала», чтобы проверить, не привела ли какая-либо из вышеуказанных конфигураций к ошибкам.
Шаг 2: Проверьте свои журналы
Итак, теперь вы здесь, как вы можете есть много желтых сообщений (ПРЕДУПРЕЖДЕНИЯ). Убедитесь, что у вас нет сообщений об ошибках, отмеченных красным. Ранее в нашей конфигурации мы добавили запрос select в наш db-data-config.xml , скажем, если бы в этом запросе были какие-либо ошибки, он бы появился здесь.
Хорошо, без ошибок. Мы в порядке. Давайте выберем collection1 из списка, как изображено, и выберите Dataimport
Шаг 3: DIH (обработчик импорта данных)
Используя DIH, вы будете подключаться к MySQL из Solr через файл конфигурации db-data-config.xml из интерфейса Solr и извлекать 10 записей из базы данных, которая индексируется в Solr .
Для этого выберите « Полный импорт» и установите флажки « Очистить и зафиксировать» . Теперь нажмите Выполнить, как показано.
В качестве альтернативы, вы также можете использовать прямой запрос полного импорта, как этот ..
После того, как вы нажали « Выполнить» , Solr начнет индексировать записи. Если возникнут какие-либо ошибки, появится сообщение « Ошибка индексации», и вам придется вернуться в раздел « Ведение журнала », чтобы узнать, что пошло не так.
Предполагая, что в этой конфигурации нет ошибок, и если индексация завершена успешно, вы получите это уведомление.
Шаг 4: Выполнение Solr Queries
Похоже, что все прошло хорошо, теперь вы можете использовать Solr Queries для запроса данных, которые были проиндексированы. Нажмите на Запрос слева, а затем нажмите кнопку Выполнить внизу.
Вы увидите проиндексированные записи, как показано.
Соответствующий запрос Solr для перечисления всех записей
Ну, там идет все 10 проиндексированных записей. Скажем, нам нужны только имена, начинающиеся с Ja , в этом случае вам нужно указать имя столбца
solr_name
, поэтому ваш запрос выглядит следующим образом.Вот как вы пишете Solr Queries. Чтобы узнать больше об этом, проверьте эту прекрасную статью .
источник
Я сейчас смотрю на полнотекстовый поиск PostgreSQL, и в нем есть все необходимые функции современного поискового движка, действительно хорошая расширенная поддержка символов и многоязычность, хорошая тесная интеграция с текстовыми полями в базе данных.
Но у него нет удобных операторов поиска, таких как + или AND (использует & |!), И я не в восторге от того, как это работает на их сайте документации. Несмотря на то, что он содержит выделение терминов соответствия в фрагментах результатов, алгоритм по умолчанию, для которого термины соответствия не являются хорошими. Кроме того, если вы хотите индексировать RTF, PDF, MS Office, вы должны найти и интегрировать конвертер форматов файлов.
OTOH, это намного лучше, чем текстовый поиск MySQL, который даже не индексирует слова из трех букв или меньше. Это значение по умолчанию для поиска в MediaWiki, и я действительно считаю, что это не годится для конечных пользователей: http://www.searchtools.com/analysis/mediawiki-search/
Во всех случаях, которые я видел, Lucene / Solr и Sphinx действительно великолепны . Они представляют собой надежный код и развились благодаря значительным улучшениям в удобстве использования, поэтому все инструменты для поиска позволяют удовлетворить практически всех.
для SHAILI - SOLR включает в себя библиотеку поисковых кодов Lucene и содержит компоненты, которые должны быть хорошим поисковым механизмом.
источник
Tsearch
. Но Tsearch не поддерживает поиск по фразе. Это все еще в их списке TODO sai.msu.su/~megera/wiki/FTS_Todo .Просто мои два цента на этот очень старый вопрос. Я очень рекомендую взглянуть на ElasticSearch .
Преимущества перед другими FTS (полнотекстовый поиск) Двигатели:
Мы используем эту поисковую систему в нашем проекте и очень довольны ею.
источник
SearchTools-Avi сказал: «Текстовый поиск MySQL, который даже не индексирует слова из трех букв или меньше».
К сведению, минимальная длина слова в полнотексте MySQL регулируется, по крайней мере, с MySQL 5.0. Google 'mysql fulltext min length' для простых инструкций.
Тем не менее, полный текст MySQL имеет ограничения: например, он медленно обновляется, когда вы достигаете миллиона записей или около того, ...
источник
Я бы добавил mnoGoSearch в список. Чрезвычайно эффективное и гибкое решение, которое работает как Google: индексатор извлекает данные с нескольких сайтов, вы можете использовать базовые критерии или придумывать свои собственные хуки для обеспечения максимального качества поиска. Также он может получать данные непосредственно из базы данных.
Решение не так известно сегодня, но оно удовлетворяет максимальным потребностям. Вы можете скомпилировать и установить его либо на автономный сервер, либо даже на Ваш основной сервер, для него не нужно столько ресурсов, сколько в Solr, так как он написан на C и отлично работает даже на небольших серверах.
Вначале вам нужно скомпилировать его самостоятельно, поэтому это требует некоторых знаний. Я сделал крошечный скрипт для Debian, который мог бы помочь. Любые корректировки приветствуются.
Поскольку вы используете фреймворк Django, вы можете использовать или PHP-клиент посередине, или найти решение на Python, я видел несколько статей .
И, конечно, mnoGoSearch является открытым исходным кодом, GNU GPL.
источник