Si usted no está opone a la introducción de Redis en la mezcla, echar un vistazo a https://github.com/seatgeek/soulmate - Desde el README:
alma gemela es una herramienta para ayudar a resolver el problema común de desarrollar una función de autocompletar rápido. Utiliza los conjuntos ordenados de Redis para construir un índice de palabras parcialmente completadas y los elementos de coincidencia superior correspondientes, y proporciona una aplicación de sinatra simple para consultarlos. Soulmate termina tus oraciones.
alma gemela fue diseñado para ser simple y rápido, y ofrece lo siguiente:
- proporcionar sugerencias para múltiples tipos de elementos en una sola consulta (en SeatGeek estamos autocompletar para los artistas, eventos y lugares)
- Los resultados se ordenan por un marcador
- metadatos arbitraria para cada elemento (en SeatGeek estamos almacenar tanto una URL y un subtítulo)
un artículo que he especificado por el usuario sa simple objeto JSON que se parece a:
{
"id": 3,
"term": "Citi Field",
"score": 81,
"data": {
"url": "/citi-field-tickets/",
"subtitle": "Flushing, NY"
}
}
Dónde id
es un identificador único (en el tipo específico), term
es la frase que desea proporcionar terminaciones para, score
es un ranking especificados por el usuario métricas (Redis se ordene cosas lexicográficamente para artículos con el mismo puntaje), y data
es un contenedor opcional para los metadatos que desea devolver cuando se combina este artículo (en SeatGeek, incluimos una url para el artículo, así como un subtítulo para cuando presentarlo en un menú desplegable de autocompletar).
Ver Soulmate en acción en SeatGeek.
Si nada más, tal vez le dará algunas ideas sobre cómo estructurar los datos de una manera que tenga sentido.
No escribí ni tuve nada que ver con alma gemela. Es solo una biblioteca que descubrí cuando intentaba resolver un problema similar. ¡Espero eso ayude!