Abbiamo registrato migliaia di pagine di articoli di giornale. Il giornale, il numero, la data, il numero di pagina e il text OCR di each pagina sono stati inseriti in un database mySQL.
Ora vogliamo creare un motore di ricerca simile a Google in PHP per trovare le pagine fornite da una query. Deve essere veloce e non richiedere più di un secondo per qualsiasi ricerca.
Come dovremmo farlo?
Puoi anche provare SphinxSearch . Craigslist usa la sfinge e può connettersi sia a mysql che a postgresql.
Ci sono alcuni motori di ricerca interessanti per te da dare un'occhiata. Non so cosa intendi con "Google mi piace", quindi ignorerò questa parte.
Se la ricerca full text di MySQL impiega 20 secondi per query, è configurata in modo errato o in esecuzione su hardware sottodimensionato: alcuni siti di grandi size stanno utilizzando con successo la semplice ricerca MyISAM.
Il mio voto vale per Solr , tuttavia. Si basa su Lucene, in modo da get tutta la ricchezza e le performance di quel prodotto migliore di razza, ma con un'API RESTful, che lo rende molto facilmente da PHP . C'è anche un articolo dW .
Puoi mettere tutti i file su Google Docs, quindi raschiare i risultati sul tuo sito web.
La mia preoccupazione è che l'accuratezza dell'OCR sia ancora un problema, quindi una considerazione per un requisito di ricerca è la possibilità di eseguire ricerche "sfocate". Significato sfocato quando l'OCR riconosce erroneamente la parola "cappello" per "caldo", il motore di ricerca sarà abbastanza intelligente da restituire risultati simili ma non esatti. In Oracle, esiste una function chiamata UTL_MATCH che confronta la somiglianza tra due stringhe: http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/u_match.htm#ARPLS352
Una function come questa sarebbe utile.
Il tuo scenario suggerisce che ti piacerebbe lanciare da solo; i buoni punti di partenza per un motore di ricerca generale includono:
Se si desidera utilizzare una soluzione off-shelf:
Perché non provi qualcosa come Google Search Appliance o Google Enterprise? Avrà un costo associato ma poi ti risparmierà dal re-inventare la ruota e ti darà la ricerca "come su Google".
Controlla questa port Lucene per PHP:
Zend_Search_Lucene
Potresti voler controllare Sphider . Nella mia esperienza è abbastanza veloce e fa l'indexing automaticamente. È anche open source, quindi puoi prendere il codice e modificarlo per le tue esigenze.
sqlite ha una capacità di ricerca full text abbastanza buona (guarda sqlite FTS 3/4 – è sorprendentemente buona)
se si desidera un semplice approccio diy in PHP, l'indexing utilizzando un sacco di piccoli file divisi da un hash dei termini indicizzati può funzionare molto bene e la ricerca può essere molto veloce anche in php se si cura di progettarlo. (l'idea è di effettuare una ricerca su un termine solo per cercare un file molto piccolo che contenga termini corrispondenti all'hash e all'ID del record – potresti usare le slice di bitarrays per rappresentare gli ID dei record se vuoi salvare lo spazio HD) .. ma facendo il l'indexing di each parola per il text completo sarebbe lenta in php .. quella parte dovrebbe essere davvero fatta in c
per le ricerche "Fuzzy" è ansible utilizzare gli hash del metaphone.
per gli strumenti di fulltext pre-costruiti controlla questi: sqlite FTS 3/4 (sqlite ha ottime capacità di ricerca fulltext!), Sphinx, kinoSearch (kinoSearch è un po 'come Lucene ma il back-end è c con un bel wrapper perl facile – c'è anche cLucene ma penso che sia ancora pre-alpha)
Java Lucene (o qualsiasi cosa sia basata su Java) probabilmente ha bisogno di un sacco di ram per essere messo da parte per eseguire una JVM – quindi probabilmente non è così grande se hai un budget
Controlla questo motore di ricerca con php e MySQL ….. Funziona come il motore di ricerca di Google. Starkbook php-MySQL motore di ricerca