2013-04-10 10 views
8

Ci scusiamo per la domanda generalizzata ... Sono a caccia da molto tempo e non ho trovato nulla che possa usare o facilmente adattarsi ancora. Apprezzo davvero qualsiasi suggerimento!Strumenti per cercare testo completo nel pacchetto iOS

Sto costruendo un'app di riferimento che conterrà diversi libri di testo in formato di testo normale. Voglio che l'utente sia in grado di eseguire una ricerca e recuperare un tavolo con un elenco di risultati. Ho un prototipo funzionante, ma la logica di ricerca che ho scritto non è poi così intelligente ed è stato un inferno cercare di migliorarlo.

Questo è ovviamente un problema abbastanza comune, quindi sto cercando uno strumento che potrei adattare al compito. Finora ho trovato Lucene (http://vafer.org/blog/20090107014544/) e Locayta (http://www.locayta.com/iOS-search-engine/locayta-search-mobile/)

Lucene sembra essere stato aggiornato per l'ultima volta su iOS 2 ... Non so nemmeno se riuscirò a rielaborarlo da solo. Può essere.

Locayta probabilmente funzionerebbe benissimo, ma una licenza commerciale è di $ 1.000 e potrei non recuperarlo presto con questa app, visto che si tratta di un mercato di nicchia.

Grazie!

+0

Beh, credo di avere una possibile soluzione: https://github.com/TonnyXu/sqliteFTS dovrò leggere molto su SQLite come non ho mai usato direttamente, ma questo sembra essere quello che sto cercando. Apprezzo comunque qualsiasi riferimento che altri possano fornire. Grazie! –

+0

Aggiunta la taglia perché sto ancora cercando una guida ... Ho trovato alcune cose open source (LuceneKit, FTS, alcune estensioni SQL) ma non sono stato in grado di implementarle con successo ... ad es. , Non riesco nemmeno a farli entrare nel mio progetto. La maggior parte sono irrimediabilmente obsolete e non sembrano essere mantenute. Nessun tutorial che posso seguire, neanche. Alcuni siti dicono che FTS è incluso in iOS SQLite, altri ti dicono di fare una canzone enorme e ballare e costruire la tua libreria statica ... che diamine? Sono solo perso. Apprezzo qualsiasi aiuto. –

risposta

5

Siamo incappati nella stessa situazione in cui lavoro e devo ancora decidere una soluzione. Locayta sembra promettente, ma a parte questo, ho esaminato anche FTS3/FTS4 di SQLite.

L'unico problema sembrava la mancanza di un modo per abbinare parole parziali. È facile cercare i campi che contengono parole intere (ad esempio "carta" corrisponde a "carta da stampante", "carta perforata" e "carta da disegno") o parole che iniziano con qualcosa (ad esempio "bi *" corrisponde a "raccoglitore" ", e" bicicletta "), ma non esiste un modo integrato per abbinare un suffisso.

Se non si richiede tale funzionalità, FTS3/FTS4 potrebbe funzionare.

Vedo che nel follow-up il tuo SQLite non ha riconosciuto FTS3(), e ho avuto lo stesso problema all'inizio. Apparentemente non è incluso nella versione iOS per impostazione predefinita, ma è necessario scaricare la fusione SQLite3 e includerlo manualmente nel progetto. Come si trova a is FTS available in the iOS build of SQLite?

Si noti inoltre, la variabile SQLITE_ENABLE_FTS3 non è abilitato di default, basta aggiungerlo alla configurazione come dettagliato in http://www.sqlite.org/fts3.html#section_2

Spero che questo aiuti.

+0

Apprezzo molto l'aiuto, grazie. È stato molto difficile per me trovare istruzioni specifiche per iOS su SQLite ...Posso trovare le istruzioni SQLite, ma in realtà non so cosa fare con loro, in altre parole. Non riesco a programmare in linea C e i vari wrapper sono sconcertanti. Ho accettato che non esiste una soluzione semplice per farlo e che estenderà il mio tempo di sviluppo di alcune settimane. Molto sorprendente dal momento che immagino che questo sia un problema abbastanza comune e ho pensato che ci sarebbe stata una buona roba open source. Mi auguro che Apple possa abilitare Spotlight in iOS !!! –

+0

Potrei tornare a usare il mio vecchio metodo "rangeOfString" ... ci sono voluti alcuni secondi ma ha funzionato. Pensavo che FTS sarebbe stato ragionevolmente facile da implementare, ma lo trovo quasi impossibile. Ci sono zero tutorial che ti guidano realmente nel processo di impostazione. Sono nuovo di questa piattaforma quindi conosco i dati di base, ma non ho mai incasinato direttamente SQLite: tutte le risorse che ho trovato sembrano presupporre che tu sia già un professionista di SQLite. Oh bene. –

+0

@ReidBelton Sì, non conosco alcun modo per utilizzare FTS tramite i dati principali. Coinvolge l'interazione diretta con SQLite. Una volta abilitato, è necessario creare una tabella virtuale con i campi da cercare e eseguire query SQLite su quello. Posso vedere come sarebbe una seccatura se non si ha familiarità con l'interazione diretta con il database. – Luca

4

Se è possibile tradurre codice C semplice in Objective-C iOS, quindi Apache Lucy (una porta "C" libera di Lucene) potrebbe valere la pena dare un'occhiata.

Problemi correlati