У нас есть тысячи страниц газетных статей. Газета, выпуск, дата, номер страницы и текст OCRed каждой страницы были помещены в базу данных mySQL.
Теперь мы хотим создать Google-подобную поисковую систему в PHP, чтобы найти страницы с запросом. Он должен быть быстрым, и для любого поиска требуется не более секунды.
Как нам это сделать?
Вы также можете попробовать SphinxSearch . Craigslist использует sphinx и может подключаться как к mysql, так и postgresql.
Для вас есть интересные поисковые системы. Я не знаю, что вы подразумеваете под «Google like», поэтому я просто проигнорирую эту часть.
Если полнотекстовый поиск 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
Такая функция была бы полезна.
Ваш сценарий предполагает, что вы хотите бросить свой собственный; хорошие отправные точки для общей поисковой системы включают:
Если вы хотите использовать готовое решение:
Почему бы вам не попробовать что-то вроде 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