2010-01-10 16 views
11

Estoy buscando sugerencias sobre la mejor manera de implementar una búsqueda de texto completo en algunos datos estáticos en el iPhone.Implementando la búsqueda de texto completo en iPhone?

Básicamente tengo una aplicación que contiene la versión fuera de línea de un sitio web, unos 50 MB de texto, y me gustaría que los usuarios puedan buscar los términos. Me imagino que de alguna manera debería construir una tabla de ("word", reference_to_file_containing_word) o algo así, poner eso en Core Data o simplemente sqlite, indexar la columna "word", luego hacer que el buscador busque en la tabla términos de búsqueda y tome la intersección de los conjuntos de resultados para los términos o algo.

Eso no permitiría a las personas buscar frases pero sería bastante fácil y probablemente no demasiado lento.

Me gustaría utilizar las funciones de SDK existentes para esto. ¿Debo usar Core Data o sqlite?

¿Alguien tiene alguna otra idea sobre cómo se podría hacer esto?

Respuesta

8

¿Desea colocar cada palabra del documento en su propia fila en una base de datos? Eso va a ocupar aún más espacio que el documento en sí.

Recomendaría simplemente buscar a través del texto; Regex es realmente bastante rápido. De lo contrario, podría implementar Boyer-Moore con bastante facilidad.

[Editar] Si insiste en crear un índice de palabras, no puede vencer a trie. Sería más rápido que usar una base de datos, y muy probablemente ocupe menos espacio que los documentos mismos (a diferencia de la base de datos)

+0

Gracias! Creo que intentaré simplemente atravesar todos los archivos con expresiones regulares primero, y luego, si es demasiado lento, intentaré con otras cosas desde allí. Una vez realizada la programación relacionada con la red, estoy un poco familiarizado con los intentos, pero no pensé en aplicarlos a las palabras en lugar de a los prefijos de red. – Nimrod

2

La respuesta es FTS3 para SQLite. Google it, hay muchos tutoriales sobre cómo hacerlo funcionar en iPhone.

Y la manera fácil de usar SQLite en iPhone es utilizando FMDB.

Cuestiones relacionadas