PHP / MySQL Google gibi Arama Motoru

9 Cevap php

Biz gazete makaleleri binlerce sayfalık OCRed var. Gazete, konu, tarih, sayfa numarası ve her sayfanın OCRed metin bir mySQL veritabanına girmiştir.

Şimdi bir sorgu verilen sayfaları bulmak için PHP bir Google gibi arama motoru inşa etmek istiyoruz. Bu hızlı olması ve herhangi bir arama için ikinci bir fazla almak için var.

Bunu nasıl yapmalıyım?

9 Cevap

Ayrıca denemek SphinxSearch. Olabilir Craigslist sfenks kullanır ve mysql ve postgresql hem de bağlanabilirsiniz.

Eğer bakmak için bazı ilginç arama motorları vardır. Ben bunu sadece o kısmını görmezden gidiyorum "gibi Google" ile ne demek bilmiyorum.

  • Lucene motoruna bir göz atın. Orijinal yüksek performanslı ama Java ile yazılmış. Orada bir port of Lucene to PHP (zaten başka bir yerde sözü) ama çok yavaş.
  • Xapian Project ciddi bir göz atın. Bu hızlı. Büyük olasılıkla hedef sunucu (lar) için inşa ancak PHP bağları vardır gerekecek bu yüzden C + + ile yazılmış.

MySQL tam metin arama sorgusu başına 20 saniye alıyor, bunu hatalı ya da yeterince güçlü donanım üzerinde çalışan var ya - Bazı big siteler başarıyla düz eski MyISAM arama kullanıyor.

Benim oy Ancak, Solr için de geçerli. Bu Lucene dayalı, bu yüzden tüm zenginliğini ve cins ürünün bu iyi performansı almak, ama bir sığınakta API ile, çok kolay bir hale from PHP oluyor. Hatta bir dW article var.

Daha sonra kendi web sitesine sonuçları kazımak, Google Docs üzerindeki tüm dosyaları koyabilirsiniz.

Benim endişe OCR doğruluğu hala bir sorun olduğunu, bu nedenle bir arama ihtiyacı için bir bedel "bulanık" arama gerçekleştirmek için yeteneğidir. OCR yanlış "sıcak" kelimesini "şapka" kabul Bulanık anlamı, arama motoru kesin benzer ancak sonuçlar döndürebilir kadar akıllı olacak. Oracle, iki dizeleri arasındaki benzerliği karşılaştırır UTL_MATCH adında bir işlevi vardır: http://docs.oracle.com/cd/E14072_01/appdev.112/e10577/u_match.htm

Böyle bir fonksiyon, yararlı olacaktır.

Sizin senaryo kendi rulo isterim ki, öneririz; genel bir arama motoru için iyi başlangıç ​​noktaları içerir:

Eğer bir off-raf çözümü kullanmak istiyorsanız:

Neden Google Arama Cihazı veya Google Enterprise gibi bir şey denemiyorsunuz? Bu maliyet ilişkili olacak ancak daha sonra yeniden icat tekerlek kurtaracak ve arama "gibi google" verecektir.

Sen kontrol etmek isteyebilirsiniz Sphider. Benim durumumda oldukça hızlı ve indeksleme otomatik olarak yapar. Eğer kodu almak ve ihtiyaçlarınız için değiştirebilirsiniz böylece aynı zamanda açık kaynak.

sqlite has quite good full text search capability (look up sqlite FTS 3/4 - its surprisingly good)

if you want simple a PHP diy approach indexing using up of lots of small files split by a hash of the terms being indexed can work very well amd searching can be very fast even in php if you take care designing it. (the idea is to make a search on a term only need to search a very small file containing terms matching the hash and record id's - you could use bitarray slices to represent record ids if you want to save HD space) .. but doing the indexing of every word for fulltext would be slow in php .. that part should really be done in c

"Bulanık" aramalar için belki metaphone sağlamalarının kullanarak bakmak.

for pre-built fulltext tools check out these: sqlite FTS 3/4 (sqlite has very good fulltext search capability!), Sphinx, kinoSearch (kinoSearch is a bit like Lucene but the back-end is c with a nice easy perl wrapper - there is also cLucene but I think thats still pre-alpha)

Java Lucene (veya Java tabanlı bir şey), muhtemelen bir JVM çalıştırmak için ayrılacak için ram çok ihtiyacı - Eğer bir bütçe üzerinde iseniz yani muhtemelen kadar büyük değil