Closed C0chett0 closed 1 year ago
Hi @C0chett0, it'd be nice to have something like this. To avoid adding a lot of methods, I'm thinking we could do something like:
Item::nearestNeighbors('embedding', $embedding, Distance::MaxInnerProduct, maxDistance: 10)->take(5)->get();
which adds orderByRaw
, selectRaw
for a column named neighbor_distance
, and optionally whereRaw
if maxDistance
is given.
This is essentially how Neighbor does it.
Added to ideas (#1)
Just released 0.1.3 with a HasNeighbors
trait and nearestNeighbors
method.
Hello @ankane,
I've added a few macros to the Laravel QueryBuilder in my project : whereInnerProduct, orWhereInnerProduct, selectInnerProduct , addSelectInnerProduct and orderByInnerProduct (yes I use embeddings from OpenAI 😋). They all have an array of two values as their first parameter, those two values being either a string representing a column name, an array or a Vector. It makes querying with your postgres operators more Laravelish :
becomes
becomes
And so on ...
Would you be interested in a ServiceProvider adding all possible methods for the three operators ?
And if I understand correctly your idea of a distance function in Laravel it could be as easy as :