Búsqueda vectorial usando JSON a través de una aplicación de servidor web, escrita en Rustlang en BC, Canadá.

Ideal para buscar vectores de lenguaje natural, vectores de imágenes o cualquier otro vectores donde desee la distancia más pequeña entre los vectores. También se adapta a las coordenadas geográficas, que es ideal para servicios o bienes que se venden en la tienda. Solo devuelve una variedad de ID, distancia vectorial y kilómetros del registro, por lo que si hay más datos que solo la ID, que tendrá que provenir de un servicio separado.
Formato de archivo requerido: Filas no ejecutadas de datos de bytes: 32 bytes para la ID, luego un número de F32 para el vector (512 es solo el ejemplo), luego 2 de F32 para la coordenada. Vea el archivo de Python serde-bin-vec.py para inspiración.
Para comenzar: cargo run --release ./words_subset.data 8989 512
Dónde: cargo run --release path_to_data port_to_host vector_size
El formato de solicitud es JSON a /search o /search_ann:
{"sort_by_vec": 1 or 0,
"geoc": [float],
"vector": [float], (matching the database size)
"geo_threshold": float,
"vec_threshold": float,
"limit_results": int}
El formato de solicitud es JSON a /get_by_id:
{"item_id": String,
"amount_of_results": int}
El formato de respuesta es json: {"items: [{"id": str}, {"id": str}, ...]}
Demo.py debería producir resultados en los registros de 10k en esta salida utilizando el archivo Words_Subset.Data:
Running exhaustive seach 100 times
times for exhaustive search
max time taken 0:00:00.011164
min time taken 0:00:00.006289
median time taken 0:00:00.006847
Running approximate seach 1000 times
times for approximate search
max time taken 0:00:00.001434
min time taken 0:00:00.000714
median time taken 0:00:00.000945
Puede haber líneas comentadas relacionadas con la geo-distancia en kilómetros. No dude en comunicarse conmigo si necesita ayuda para que funcione. Mi correo electrónico es [email protected]
Tengo un algoritmo de agrupación personalizado para la indexación. Es algo no probado.
La búsqueda se ejecuta en un solo núcleo por solicitud, pero si se ejecutan múltiples consultas al mismo tiempo, puede usar más núcleos gracias a Actix, el servidor web.
Hizo Andrew Matte, con algo de ayuda de Bob Matte, y una tercera persona secreta. Principalmente financiado por el empleo y el desarrollo social del gobierno canadiense de la Estrategia de Empleo y Habilidades Juveniles (Yess) de Canadá (ESDC) a través del proyecto del Sistema de Distribución de Oportunidades y Recursos (CONDS) contextuales.