Php + Mysql: полнотекстовый и граненый поиск без поддержки на стороне сервера - PullRequest
4 голосов
/ 26 ноября 2011

Я пытаюсь добавить поддержку поиска на моем веб-сайте (размещенном на общем веб-хостинге… hostgator.com), для которого я ищу решение с открытым исходным кодом для полнотекстового и граненого поиска, для которого не требуется серверподдержка сторон (кроме php и mysql).

Я уже посмотрел ряд решений, таких как Lucene, Solr, Sphinx, Zend Lucene, включая поддержку полнотекстового поиска Mysql.А также знайте, что Solr - лучшее решение для таких вещей.Но, как я уже сказал, мой сайт размещен на общем веб-хостинге без прав администратора, поэтому я не могу использовать Solr.Также я не могу использовать встроенную поддержку полного текста в MySQL, так как в настоящее время база данных моего сайта использует движок InnoDB.

1 Ответ

3 голосов
/ 26 ноября 2011

Рассмотрим ручное построение инвертированного индекса в таблице MyISAM.Сложнее было бы поддерживать индекс в актуальном состоянии, что потребует большого количества кода при обновлении / вставке строк или полного повторного индексирования каждые х дней (или часов).

Если вы не знаете, что такое инвертированный индекс: это индекс, в котором вы сопоставляете слово с идентификатором документа.Например, если вы хотите проиндексировать таблицу (идентификатор, имя, описание) с помощью (1, «Тестовый продукт», «Этот продукт потрясающий»), вы можете разделить слова на «Тест», «продукт», «Этот","является удивительным".Затем вы можете поместить все эти слова в таблицу базы данных (id, word, docID) => (1, «test», 1), (2, «product», 1), (3, «this», 1),и т.д.

Если вы хотите что-то искать, задайте этот индекс.Поисковый запрос "test" извлекает все записи со словом = "test", которое будет (1, "test", 1).Затем он знает, что ему нужен docID 1, и все готово.

Это определенно сложнее, чем использование стандартного решения, но оно должно работать для вашей ситуации:)

Конечно, это работает толькос разделенными пробелами языками.Если вы хотите китайский, у вас будут проблемы.

[править] Ах, да, запись в Википедии может помочь: http://en.wikipedia.org/wiki/Inverted_index

...