Recherche de vecteur utilisant JSON via une application de serveur Web, écrite en Rustlang à la Colombie-Britannique, au Canada.

Idéal pour rechercher des vecteurs en langage naturel, des vecteurs d'image ou tout autre vecteur où vous voulez la plus petite distance entre les vecteurs. Il accueille également les géo-coordonnées, ce qui est idéal pour les services ou les biens vendus en magasin. Il ne renvoie qu'un tableau d'identification, de distance vectorielle et de kilomètres de l'enregistrement, donc s'il y a plus de données que le simple identifiant, cela devra provenir d'un service séparé.
Format de fichier requis: lignes iniditées de données d'octets: 32 octets pour l'ID, puis un certain nombre de F32 pour le vecteur (512 est juste l'exemple), puis 2 de F32 pour la coordonnée. Voir le fichier Python serde-bin-vec.py pour l'inspiration.
Pour démarrer: cargo run --release ./words_subset.data 8989 512
Où: cargo run --release path_to_data port_to_host vector_size
Le format de demande est json à / search ou / 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}
Le format de demande est json à / get_by_id:
{"item_id": String,
"amount_of_results": int}
Le format de réponse est json: {"items: [{"id": str}, {"id": str}, ...]}
Demo.py devrait donner des résultats sur les enregistrements 10K dans cette sortie à l'aide du fichier 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
Il pourrait y avoir des lignes commentées liées à la géo-distance en kilomètres. N'hésitez pas à me contacter si vous avez besoin d'aide pour que cela fonctionne. Mon e-mail est [email protected]
J'ai un algorithme de clustering personnalisé pour l'indexation. C'est quelque peu non testé.
La recherche s'exécute sur un seul noyau par demande, mais si plusieurs requêtes s'exécutent en même temps, il peut utiliser plus de cœurs grâce à Actix, le serveur Web.
Fait Andrew Matte, avec l'aide de Bob Matte, et une troisième personne secrète. Findé principalement par la stratégie d'emploi et de compétences du gouvernement du gouvernement canadien (Développement social (ESDC) Stratégie des jeunes et des compétences de l'ESDC (YESS) par le biais du projet de système de distribution des opportunités et des ressources contextuels (CORDS).