Nearest Neighbor Search for Rails 项目常见问题解决方案
1. 项目基础介绍和主要编程语言
项目介绍:Neighbor
是一个为 Ruby on Rails 应用程序提供最近邻搜索功能的开源项目。它支持多种数据库系统,包括 Postgres、SQLite、MariaDB、MySQL 等,并针对不同的数据库提供了不同的向量存储和搜索策略。
主要编程语言:Ruby
2. 新手在使用这个项目时需要特别注意的问题及解决步骤
问题一:如何安装 Neighbor
问题描述:新手可能不知道如何将 Neighbor 集成到他们的 Rails 项目中。
解决步骤:
- 将以下行添加到你的 Rails 应用的 Gemfile 中:
gem "neighbor"
- 运行
bundle install
命令来安装 Gem。 - 根据你的数据库类型,运行相应的生成器命令来创建迁移文件。例如,对于使用 Postgres 的用户:
然后运行rails generate neighbor:cube
rails db:migrate
来迁移数据库。
问题二:如何在模型中添加向量字段
问题描述:新手可能不清楚如何在他们的模型中添加向量字段。
解决步骤:
- 创建一个迁移文件,例如:
class AddEmbeddingToItems < ActiveRecord::Migration[8.0] def change add_column :items, :embedding, :vector, limit: 3 # 对于 Postgres 使用 :vector,对于 SQLite 使用 :binary end end
- 运行
rails db:migrate
来执行迁移。 - 在模型中,使用
has_neighbors
方法来声明该字段是一个向量字段:class Item < ApplicationRecord has_neighbors :embedding end
问题三:如何获取最近邻记录
问题描述:新手可能不知道如何查询最近邻记录。
解决步骤:
- 首先,确保你的向量字段已经被填充了数据。
- 使用
nearest_neighbors
方法来获取最近邻记录。例如,获取一个记录的最近邻:nearest_item = item.nearest_neighbors(:embedding, distance: "euclidean").first
- 如果你想根据一个向量查询最近邻,可以这样做:
vector = [0, 9, 1, 3, 1, 1] nearest_items = Item.nearest_neighbors(:embedding, vector, distance: "euclidean").first(5)
- 返回的记录将包含一个
neighbor_distance
属性,表示与查询向量的距离。