2009-01-04 9 views
7

Supongamos que tengo una tabla de base de datos con muchos nombres. Me gustaría "ajustar partido" contra estos nombres. No estoy seguro de si la "combinación flexible" es el término adecuado para usar, pero vamos con eso por ahora. Ha habido similardiscussions en "coincidencia difusa", pero no estoy realmente interesado en la coincidencia fonética. Estoy interesado en lo que llamaría coincidencia de subconjuntos ordenados.Flex Coincidencia de muchos registros de base de datos (parecida a Quicksilver o parecida a Launchy)

Me gustaría que funcione como QuickSilver (OSX) o Launchy (Windows). Aquí hay algunos ejemplos de resultados para una cadena de búsqueda determinado:

mitM assachusetts I nstitute de T ecnología
FFoxF IRE zorro
osx ⇒ Mac OS X
msM ICROs Corporación menudo

Mi objetivo final es tener una página web con un campo de texto de auto-completar de que los datos impulsadas desde el servidor.

Estoy seguro de que obtendré los resultados adecuados en el lado del cliente mediante la combinación de características de jQuery LiveUpdate y/o jQuery QuickSelect.

Donde necesito ayuda es en cómo manejar mejor la coincidencia flexible en el lado del servidor contra una mesa grande. Tengo algunas ideas sobre cómo construir mi propio índice personalizado usando el Quicksilver scoringalgorithm y tal vez alguna lógica de índice de permutación, pero prefiero no reinventar la rueda si algo más está disponible.

En resumen:¿Cuál es la mejor manera de obtener una coincidencia de flexión rápida contra una tabla de base de datos con muchas filas?

Respuesta

4

Esto no responde a mi pregunta directamente, pero para el proyecto en el que estoy trabajando, me di cuenta de que acabo de hacer no necesidad un componente del lado del servidor para este todavía. Para facilitar el lado del cliente de mi aplicación web, que acaba de lanzar dos nuevos proyectos de código abierto:

  • LiquidMetal: Se trata de un algoritmo de puntuación Quicksilver-como que las puntuaciones de las cadenas contra abreviaturas. Útil al construir un índice.
  • Flexselect: un plugin jQuery que convierte cuadros de selección en controles de búsqueda incremental de ajuste flexible. Piénsalo como Quicksilver en una casilla de selección.Utiliza LiquidMetal para filtrar y ordenar los resultados en vivo.
+0

+1 para Flexselect. –

1

Un método sería simplemente hacer coincidencias LIKE. Ponga un% entre cada carácter, y luego antes y después de la cadena, y busque en función de eso. Obviamente, eso atraerá otras cosas para ms como 'm ultimedia s ystems', pero probablemente podría emparejar eso con otra tabla que contenga coincidencias 'sugeridas', y ordenarlas también por esas.

+0

Sí, lo pensé un poco, pero ciertamente no escala bien para las tablas grandes. Se requeriría un escaneo completo de la tabla. Tampoco marca los resultados. Los caracteres secuenciales y las iniciales de las palabras deben tener una puntuación más alta que los subconjuntos aleatorios. –

Cuestiones relacionadas