Семантическая поисковая система, написанная на Java как университетский проект
Предупреждение
Этот проект абсолютно не готов производства . Он был разработан как университетский проект, как доказательство концепции. Если вы видите это сообщение, это означает, что я уже разрабатываю новую версию этого проекта, которая основана на архитектуре микросервиса и гораздо более оптимизирован.
Вам нужно определить некоторые Env Vars:
export MILVUS_HOST=localhost MILVUS_PORT=19530 MONGODB_URI=mongodb://localhost:27017/ RABBITMQ_HOST=localhost RABBITMQ_USERNAME=user RABBITMQ_PASSWORD=pass MODEL_PATH=models/model.onnx Вам нужна модель встраивания в формате ONNX. Я использовал эту модель: Cointegrated/Labse-en-ru. Чтобы преобразовать, я использовал утилиту из этой статьи: Экспорт в ONNX. Кроме того, вы можете использовать любую модель встраивания в формате ONNX с векторным измерением 768. Поместите модель в папку моделей, например, models/model.onnx
Создайте и запустите проект с:
./gradlew runAPI будет доступен на порту 4567
Примечание
Проект был написан с акцентом на тот факт, что будет возможно запустить столько работников индексации, сколько вы хотите. Но из -за жестких сроков не хватало времени для оптимизации, и каждый работник по индексации загружает модель в свою память. Беги с осторожностью!
Блок -схема TD
U (пользователь)
A (пользовательский API)
S (служба поиска)
Я (услуга индексации)
E (модель встраивания)
DM [(Mongo)]
DV [(Milvus)]
R [(Rabbitmq)]
U -> | API -запрос | А
A -> | Отправить задачу индексации в очередь | Ведущий
R -> | Получить задание | я
Я -> | хранить ключевые слова | Дм
Я -> | генерировать больше задач индексации | Ведущий
Я -> | Извлечение из текста | Эн
E -> | хранить встраивание | Двер
A -> | запрос на поиск | С
S -> | Выдержка из запроса | Эн
S -> | запрос по ключевым словам | Дм
S -> | Запрос путем внедрения | Двер