Вопрос или проблема
Я хочу самостоятельно разместить поисковую систему, которая индексирует мой статический вебсайт(ы).
Я не хочу использовать CMS (в которых обычно встроена поисковая система) для этих сайтов и не хочу направлять своих посетителей к стороннему сервису поисковых систем.
Это не обязательно должна быть удобная для пользователя поисковая система (такая как Google, Bing и т.д.), она в основном предназначена для опытных пользователей, поэтому может потребоваться сложный синтаксис поиска.
Требования
Официальные требования:
-
Поисковая система должна быть FLOSS.
-
Она должна работать на сервере GNU/Linux.
-
Она не должна использовать Java (я знаю, что есть несколько хороших проектов поисковых систем на Java, но, к сожалению, мой хост не поддерживает это).
Бэкэнд:
-
Поисковая система должна индексировать (X)HTML5. Поддержка других форматов не требуется.
-
Я не хочу, чтобы паук сам находил мои страницы. Вместо этого я хочу предоставить список URL-адресов, которые должны быть проиндексированы (в идеале поддерживая один из форматов sitemaps.org).
-
Я не хочу добавлять метаданные о документах где-либо, кроме самих документов.
Фронтэнд:
- Поисковая система не должна требовать JavaScript (за исключением необязательных функций).
- Она не должна устанавливать cookies (если пользователь явно не отправит форму настройки или подобное).
Мой список желаний
-
Индексация: В дополнение к полному тексту, она должна индексировать как можно больше сигналов (например, в виде пар “имя-значение”), таких как метатеги, RDFa/JSON-LD, семантические элементы и т.д.
-
SERP: Я хочу иметь возможность определять, как должны выглядеть результаты, в зависимости от индексированных данных. Похоже на расширенные сниппеты Google. Например: показать изображение, список, короткую таблицу и т.д.
-
Рейтинг: Я хотел бы иметь возможность настраивать алгоритм ранжирования, т.е. присваивать каждому полю определенный балл/приоритет.
-
Операторы поиска: Она должна по крайней мере поддерживать логические
AND
/OR
/NOT
и скобки (например,(laptop OR notebook) (review OR reviews) -netbook
). Чем больше операторов, тем лучше (поиск по фразам/диапазонам/близости; поиск по полям; специальные символы, чувствительность к регистру и т.д.).
Что насчет доброй старой ht:dig?
Последний релиз датирован 2004 годом, поэтому я не уверен, как он индексирует новые элементы, введенные HTML5.
Поддержка текстовых форматов, отличных от HTML (PDF, DOCX…) также не оптимальна, но это не входит в ваш список требований.
Я также рекомендую Sphinx – смотрите sphinxsearch.com
Sphinx – это сервер полнотекстового поиска с открытым исходным кодом, разработанный с нуля с учетом производительности, релевантности (т.е. качества поиска) и простоты интеграции. Он написан на C++ и работает на Linux (RedHat, Ubuntu и т.д.), Windows, MacOS, Solaris, FreeBSD и ряде других систем.
Sphinx позволяет либо быстро и легко индексировать и искать данные, хранящиеся в базе данных SQL, NoSQL или просто в файлах, либо индексировать и искать данные на лету, работая с Sphinx практически так же, как с сервером базы данных.
У меня только положительный опыт использования его на Linux и Windows.
Ответ или решение
Создание и настройка самохостинг поисковой системы для статических сайтов является актуальной задачей, особенно в условиях желания контролировать данные и избежать использования сторонних сервисов. В данном ответе будут представлены варианты поисковых систем, соответствующие вашим требованиям.
Обзор требований
Формальные требования:
- Проект должен быть свободным программным обеспечением (FLOSS).
- Запуск на сервере GNU/Linux.
- Отсутствие использования Java.
Требования к бэкенду:
- Индексация (X)HTML5.
- Возможность предоставления списка URL для обхода, предпочтительно в формате sitemaps.org.
- Поддержка метаданных исключительно в самом документе.
Требования к фронтенду:
- Отказ от JavaScript, за исключением опциональных функций.
- Отсутствие установки cookies, если пользователь не подаст настройки.
Рекомендации по выбору программного обеспечения
-
Sphinx
- Sphinx — это мощный сервер полнотекстового поиска, разработанный на C++. Он поддерживает индексацию данных, хранящихся в SQL или NoSQL базах данных, а также предоставляет возможность индексирования файлов. Sphinx позволяет настраивать алгоритм ранжирования и поддерживает расширенные операторы поиска, такие как AND, OR, NOT, а также фильтрацию по полям. Он подходит для вашего сценария, так как позволяет гибко настраивать внешние интерфейсы и форматы выдачи.
- Преимущества:
- Высокая производительность и качество поиска.
- Легкость интеграции с существующими системами.
- Возможность кастомизации отображения результатов поиска, что соответствует вашим желаниям о SERP.
-
Xapian
- Xapian — это еще одно FLOSS решение, предоставляющее API для полнотекстового поиска. Он не использует Java и поддерживает индексацию HTML5, позволяя организовать гибкую систему поиска. Xapian предлагает специальные операторы и возможности ручной настройки весов полей.
- Преимущества:
- Можно интегрировать с различными приложениями и языками программирования (особенно удобно с Python и PHP).
- Поддержка множества функций, расширяющих стандартный поиск.
-
Whoosh
- Whoosh — это библиотека поиска на Python, которая не требует сторонних серверов и может работать в том же приложении, что и ваш сайт. Она идеально подходит для небольших проектов и статических сайтов.
- Преимущества:
- Легкость в использовании и настройке.
- Полная свобода в определении структуры индексации и поисковых запросов.
Заключение
Из вышеперечисленных решений, Sphinx будет наиболее подходящим выбором с учетом требований к стабильности, гибкости, возможностям кастомизации и функциональности. Важно учитывать, что настройка и поддержка такой системы потребуют определенных технических навыков. Сочетание различных решений — например, использование Sphinx для индексации и Whoosh для конкретных нужд — также может быть целесообразным.
При установке и настройке полученной системы обязательно следуйте рекомендациям по безопасности и оптимизации, ведь это позволит насладиться всеми преимуществами самохостинга, обеспечивая при этом быстрый и безопасный доступ к вашим данным.