Векторный поиск с использованием JSON через приложение для веб-сервера, написанное в Rustlang в Британской Колумбии, Канада.

Отлично подходит для поиска векторов естественного языка, векторов изображений или любых других векторов, где вы хотите наименьшее расстояние между векторами. Он также вмещает геоорнаты, которые отлично подходят для услуг или товаров, которые продаются в магазине. Он возвращает только массив идентификатора, векторного расстояния и километров от записи, поэтому, если есть больше данных, чем просто идентификатор, это должно быть из отдельного услуги.
Требуемый формат файла: Неожиданные строки данных байтов: 32 байта для идентификатора, затем некоторое количество F32 для вектора (512 - только пример), затем 2 из F32 для координаты. См. Python File serde-bin-vec.py для вдохновения.
Для запуска: cargo run --release ./words_subset.data 8989 512
Где: cargo run --release path_to_data port_to_host vector_size
Формат запроса - это json to /search или /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}
Формат запроса json to /get_by_id:
{"item_id": String,
"amount_of_results": int}
Формат ответа json: {"items: [{"id": str}, {"id": str}, ...]}
Demo.py должен дать результаты на 10K записей на этом выводе, используя файл 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
Там могут быть прокомментированы строки, связанные с геоистанью в километрах. Пожалуйста, не стесняйтесь обратиться ко мне, если вам нужна помощь, чтобы получить эту работу. Мое электронное письмо [email protected]
У меня есть пользовательский алгоритм кластеризации для индексации. Это несколько непроверено.
Поиск запускается по одному ядра для запроса, но если несколько запросов выполняются одновременно, он может использовать больше ядер благодаря Actix, WebServer.
Сделал Эндрю Матте, с некоторой помощью Боба Матта и секретного третьего лица. В основном финансируется в рамках занятости и социального развития правительства канадского правительства Канады (ESDC) стратегии занятости и навыков (YESS) в рамках проекта «Система распределения контекстных возможностей и распределения ресурсов» (CORDS).