1️⃣ Додаємо гем та вмикаємо розширення:
# Gemfile
gem “pgvector”
Створюємо міграцію:
class EnablePgvector < ActiveRecord::Migration[7.1]
def change
enable_extension “vector”
end
end
2️⃣ Додаємо векторну колонку до моделі:
class AddEmbeddingToProducts < ActiveRecord::Migration[7.1]
def change
# 1536 — розмірність для стандартних векторів OpenAI (text-embedding-3-small)
add_column :products, :embedding, :vector, limit: 1536
end
end
3️⃣ Підключаємо магію в ActiveRecord:
class Product < ApplicationRecord
has_neighbors :embedding
end
4️⃣ Робимо семантичний пошук у коді:
# Отримуємо вектор від AI для пошукового запиту “теплий худі на зимову погоду”
user_vector = OpenAIClient.embed(“теплий худі на зимову погоду“)
# Шукаємо найближчі товари за косинусною відстаню прямо через SQL:
@nearest_products = Product.nearest_neighbors(:embedding, user_vector, distance: “cosine”).first(5)
🔥 Чому це круто:
• Жодних сторонніх сервісів — все всередині вашої Postgres.
• Повна підтримка стандартних з’єднань, scope та фільтрів ActiveRecord.
• Легко масштабується до мільйонів записів за допомогою HNSW індексів.
А ви вже пробували впроваджувати векторний пошук у своїх Rails-проектах чи поки використовуєте звичайний Full-Text Search? 👇
TikTok | Instagram | Telegram