Подтвердить что ты не робот

Google-подобная поисковая система в PHP/mySQL

У нас есть тысячи страниц газетных статей. Газета, выпуск, дата, номер страницы и текст OCRed каждой страницы были помещены в базу данных mySQL.

Теперь мы хотим создать Google-подобную поисковую систему в PHP, чтобы найти страницы с запросом. Он должен быть быстрым, и для любого поиска требуется не более секунды.

Как нам это сделать?

4b9b3361

Ответ 1

Вы также можете попробовать SphinxSearch. Craigslist использует sphinx и может подключаться как к mysql, так и postgresql.

Ответ 2

Есть несколько интересных поисковых систем, на которых вы можете взглянуть. Я не знаю, что вы подразумеваете под "Google like", поэтому я просто проигнорирую эту часть.

  • Посмотрите на движок Lucene. Оригинал отличается высокой производительностью, но написан на Java. Существует порт Lucene для PHP (уже упоминалось в другом месте), но он слишком медленный.
  • Взгляните на Xapian Project. Это быстро. Он написан на С++, поэтому вам, скорее всего, придется его создать для целевого сервера (ов), но имеет привязки PHP.

Ответ 3

Если для полнотекстового поиска MySQL требуется 20 секунд на запрос, вы либо неправильно сконфигурировали, либо работали на маломощном оборудовании - некоторые крупные сайты успешно используют простой старый поиск MyISAM.

Мой голос идет за Solr. Он основан на Lucene, поэтому вы получаете все богатство и производительность этого лучшего продукта породы, но с RESTful API, что делает его очень легким из PHP. Там даже статья dW.

Ответ 4

Вы можете поместить все файлы в Документы Google, а затем очистить результаты на своем собственном веб-сайте.

Меня беспокоит то, что точность OCR по-прежнему остается проблемой, поэтому одним из требований к поисковому запросу является возможность выполнять "нечеткие" поисковые запросы. Нечеткое значение, когда OCR неправильно распознает слово "шляпа" для "горячего", поисковая система будет достаточно умна, чтобы возвращать результаты, похожие, но не точные. В Oracle существует функция UTL_MATCH, которая сравнивает сходство между двумя строками: http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/u_match.htm#ARPLS352

Функция, подобная этой, была бы полезна.

Ответ 5

Ваш сценарий предполагает, что вы хотите бросить свой собственный; хорошей отправной точкой для общей поисковой системы будет:

Если вы хотите использовать готовое решение:

  • Если ваше приложение основано на Интернете и доступно для общедоступного Интернета, вам действительно нужно придумать очень хорошую причину, чтобы не пойти с Google Поиск по сайту
  • У Lucene есть порт для PHP

Ответ 6

Почему бы вам не попробовать что-то вроде Google Search Appliance или Google Enterprise? Это будет связано с расходами, но тогда это спасет вас от повторного создания колеса и даст вам поиск "google like".

Ответ 8

Возможно, вы захотите проверить Sphider. По моему опыту это довольно быстро и автоматически индексирует. Он также является открытым исходным кодом, поэтому вы можете взять код и изменить его для своих нужд.

Ответ 9

sqlite имеет неплохую возможность полнотекстового поиска (посмотрите на sqlite FTS 3/4 - его удивительно хорошо)

Если вы хотите простой индексирование подхода PHP diy с использованием большого количества небольших файлов, разделенных хэшем индексируемых терминов, может работать очень хорошо, и поиск может быть очень быстрым даже в php, если вы позаботитесь о его разработке. (идея состоит в том, чтобы выполнить поиск по термину только для поиска очень маленького файла, содержащего термины, соответствующие хешу и идентификатору записи - вы могли бы использовать срезы bitarray для представления идентификаторов записи, если вы хотите сохранить пространство HD) .. но выполнение индексации каждого слова для полного текста будет медленным в php.. эта часть действительно должна выполняться в c

для поиска "Нечеткие" может быть рассмотрен с использованием метафонических хэшей.

для готовых полнотекстовых инструментов выполните следующие действия: sqlite FTS 3/4 (у sqlite есть очень хорошая возможность полнотекстового поиска!), Sphinx, kinoSearch (kinoSearch немного похож на Lucene, но на back-end есть c с приятной простой оболочкой perl - есть также cLucene, но я думаю, что это все еще pre-alpha)

Java Lucene (или что-то на основе Java), вероятно, нуждается в большом количестве бара, чтобы его можно было отложить для запуска JVM - поэтому, вероятно, это не так здорово, если вы находитесь в бюджетном