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

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

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

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

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

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

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

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

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

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

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

    Такая функция была бы полезна.

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

    • Программное обеспечение для интернет-приложений / Поиск
    • Анатомия крупномасштабной гипертекстовой веб-поисковой системы некоторыми парнями
    • Если в структуре вашего документа предлагаются функции взаимосвязи, вы можете использовать это в системе ранжирования, см. PageRank

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

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

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

    Проверьте этот порт Lucene для PHP:

    • Zend_Search_Lucene

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

    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, но я думаю, что все еще пред-альфа)

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

    Проверьте эту поисковую систему с помощью php & MySQL ….. Он работает так же, как поисковая система Google. Поисковая система Starkbook php-MySQL