¿Cómo implementar la búsqueda difusa con FTS3 de SQLite?

Ya he integrado la búsqueda basada en la documentación oficial de Android y estoy utilizando el siguiente esquema y consulta SQLite:

CREATE VIRTUAL TABLE Search USING FTS3 ( _id, name, location ); select * from Search where name MATCH ? -- where ? is the user typed exact "query" -- or if it doesn't have spaces or stars I append a star to search prefix: "query*" 

Me pregunto cómo puedo extenderlo? Para permitir lo siguiente:

Digamos que tengo algunos elementos llamados:

  • Mi artículo de fantasía
  • Mi artículo secreto
  • Artículo 1
  • Su artículo de fantasía

Cuando el usuario escribe " blah en el cuadro de búsqueda, los resultados de la búsqueda mostrarán:

  • my
    • Mi artículo de fantasía
    • Mi artículo secreto
  • mfi
    • Mi feanidad
  • fan item , fanit , fit
    • Mi fan cy
    • Tu fan cy lo
  • it , item , im , itm
    • Mi fantasía m
    • Mi secreto m
    • Yo soy m # 1
    • Tu fantasía m

Los resultados deben ser clasificados en función de lo bueno que es el partido, por ejemplo, si las letras están más lejos deben clasificar más bajo que una coincidencia exacta, como para mfi : "Mi elemento de fantasía" debe clasificar por último y "MFI thingy" debe clasificar primero (Si había tal artículo).

Nota: mi min SDK es API nivel 10, lo que significa que tiene que trabajar con SQLite 3.6.22 .

Funcionalidad similar se puede encontrar principalmente en IDEs:

  • Eclipse: Tipo abierto y recurso abierto
  • IntelliJ IDEA Navegar a *
  • Sublime Text Ir a cualquier cosa

El FTS de SQLite permite buscar sólo palabras enteras o prefijos de palabras.

No hay funcionalidad incorporada para búsquedas difusas como esta. (Y la API de base de datos de Android no le permite agregar implementaciones de tabla virtual personalizadas.)

Fui con relajante mis criterios para buscar todos los comienzos palabra:

 private static String fixQuery(String query) { return query.trim().replaceAll("\\s+", "*") + "*"; } 

Funciona bastante bien. No typo-resistente, pero se siente natural cuando lo estoy usando.

  • No se pudo recuperar datos de la base de datos a listview.
  • Android: SQLite - insertWithOnConflict
  • Android Guardar imágenes en una tarjeta de memoria o en una tarjeta SD
  • Copia de seguridad de Android y restauración de la base de datos desde y hacia la tarjeta SD
  • Intenta reabrir un objeto ya cerrado: sqlitequery
  • SQLite Context.MODE_PRIVATE
  • ¿En Android puedo hacer una consulta SQL en un cursor?
  • SQLite demasiados términos en SELECT compuesto
  • Tabla de puntuaciones altas
  • ¿Puede el androide sqlite interfaz ser utilizado fuera de Android
  • Sincronizar SQLite con un servidor de bases de datos SQL externo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.