Создание полнотекстовой поисковой системы: с чего начать

Я хочу написать веб-приложение с помощью Google App Engine (поэтому языком ссылок будет Python ). Моему приложению нужна простая поисковая система, поэтому пользователи смогут находить ключевые слова, определяющие данные.

Например, если у меня есть одна таблица с этими строками:

1 Офисное помещение
2 2001: космическая одиссея
3 Бразилия

и пользовательские запросы для «пробела», строки 1 и 2 будут возвращены. Если пользователь запрашивает «офисное пространство», результатом должны быть также строки 1 и 2 (сначала строка 1).

Каковы технические рекомендации / алгоритмы, чтобы сделать это простым способом?
Можете ли вы дать мне хорошие указания на теорию, стоящую за этим?

Благодарю.

Редактировать : я не ищу здесь ничего сложного (скажем, индексирование тонны данных).

11 Solutions collect form web for “Создание полнотекстовой поисковой системы: с чего начать”

Я бы не построил его самостоятельно, если это возможно.

App Engine включает в себя основы полнотекстового поиска, и здесь есть замечательный блог, в котором описывается, как его использовать.

Существует также запрос функции в трекере ошибок, который, кажется, получает некоторое внимание в последнее время, поэтому вы можете продержаться, если сможете, до тех пор, пока это не будет реализовано.

Прочитайте серию публикаций Тима Брея по этому вопросу .

  • Задний план
  • Использование поисковых систем
  • основы
  • Точность и отзыв
  • Поиск разведки
  • Трудные условия поиска
  • Игнорируемые слова
  • Метаданные
  • интернационализация
  • Результаты ранжирования
  • XML
  • Роботы
  • Список требований

Я нашел эти две книги очень полезными, когда я использовал полнотекстовые поисковые системы.

Поиск информации

Управление гигабайтами

Как всегда начинаются в Википедии . Первый старт обычно создает инвертированный индекс.

Вот оригинальная идея:

Не создавайте индекс. Шутки в сторону.

Некоторое время назад я столкнулся с подобной проблемой. Мне нужен быстрый метод для поиска мегагргов и мегатекста текста, который был получен из документации. Мне нужно было сопоставлять не только слова, но и близость слов в больших документах (это слово рядом с этим словом). Я только что написал его на C, и скорость его меня удивила. Он был достаточно быстрым, чтобы не требовать никакой оптимизации или индексации.

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

Люцен или Автономия ! Это не из готовых решений для вас. Вам придется писать обертки поверх своих интерфейсов.
Они, безусловно, позаботятся о родах, грамматике, реляционных операторах и т. Д.

Сначала создайте свой индекс. Пройдите через вход, разбитый на слова
Для каждого слова проверьте, если он уже находится в индексе, если он добавляет текущий номер записи в индексный список, если не добавить слово и номер записи.
Чтобы найти слово, перейдите в (возможно отсортированный) индекс и верните все номера записей для этого слова.
Очень удобно делать это для списка пересказуемых размеров, используя встроенные типы хранения Python.

В качестве дополнительной утонченности вы хотите только сохранить базовую часть слова, например «найти» для «поиска» – искать алгоритмы генерации.

Книга « Введение в информационный поиск» дает хорошее представление о поле.

Немецкая версия опубликована Cambridge University Press, но вы также можете найти бесплатное онлайн-издание (в формате HTML и PDF) по ссылке выше.

См. Также вопрос, который я задал: How-To: рейтинг результатов поиска .

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

Честно говоря, умнее людей, чем я понял это. Я бы загрузил приложение solr и сделал json-вызовы из своего приложения appengine, и пусть solr позаботится об индексировании.

Я только что нашел эту статью в эти выходные: http://www.perl.com/pub/a/2003/02/19/engine.html

Выглядит не слишком сложно, чтобы сделать простую (хотя для этого нужно было бы сильно оптимизировать, чтобы быть решением типа предприятия). Я планирую попробовать доказательство концепции с некоторыми данными из Project Gutenberg.

Если вы просто ищете что-то, что вы можете изучить и узнать, я думаю, что это хорошее начало.

Python - лучший язык программирования в мире.