Un motor de búsqueda local debe admitir búsquedas tanto por palabras clave como por ubicación. Además de indexar cada documento por palabras clave de acuerdo con su contenido, uno debe indexar su ubicación (digamos par lat / long) y tal vez el nombre de una ciudad. Para mantener la búsqueda eficiente, uno debe filtrar en función del conjunto más pequeño: documentos que coinciden con las palabras clave o documentos que coinciden con la restricción geográfica (por ejemplo, dentro de un círculo de radio de 5 km a mi alrededor). Consulte la explicación de Patrick O’leary sobre Local Lucene [1], y el artículo de Grant Ingersoll sobre el mismo tema.
[1] http://www.nsshutdown.com/projec…
[2] http://www.ibm.com/developerwork…
EDITAR:
Varun Jain sugirió una estructura diferente en su comentario. Aquí está mi respuesta:
Se refiere a tres tablas: palabras clave, ciudades, distancia.
Este es un esquema de base de datos relacional, que puede ser aplicable aquí.
Permítanme sugerir un esquema diferente, que describiré en la terminología de Lucene:
Almacene un solo documento por, por ejemplo, tienda o película.
Cada documento tendrá un campo de ciudad, un campo de título y contenido y un campo de ubicación (lat / long).
Al consultar por restaurantes chinos en Londres,
consulta el índice para una coincidencia con la ciudad Y el restaurante chino, algo así como:
+ ciudad: Londres + título: restaurante chino
Luego ordena los resultados por distancia desde tu ubicación.
Esta es una consulta única en Lucene / Solr, en lugar de varias combinaciones en una base de datos.
Creo que esta es una solución más eficiente. Si utiliza un motor de búsqueda diferente o utiliza uno propio, YMMV.
- Cómo agregar números de dos listas vinculadas
- ¿Qué algoritmo de compresión de imagen se usa en WhatsApp?
- ¿Cuáles serían las implicaciones si pudiera demostrar que he descifrado el algoritmo criptográfico RSA en tiempo polinómico? ¿Qué debería hacer después?
- ¿Dónde es útil el conocimiento de las estructuras de datos en Swift?
- ¿Por qué se han desarrollado los algoritmos de ordenamiento O (n ^ 2) (como el ordenamiento por inserción y el ordenamiento por burbuja) y para qué se utilizan?