我正尝试使用redis和laravel来使用openai嵌入来查找类似的向量。
我有一个Python的例子,看起来像这样:
def search_similar_documents(self, entity_id, vector, topK=5):
query = Query("*=>[KNN 2 @embedding $vec as score]")
query.sort_by("score")
query.return_fields("score")
query.paging(0, 2)
query.dialect(2)
query_params = {"vec": vector}
return self.r.ft(self.index_name).search(query, query_params)
我试着在laravel中做同样的事情,但我没有找到库的文档,我尝试的东西不起作用。
在Laravel我有这个
public function searchSimilarityDocuments(int $entityId, array $vector, int $topK=2){
$filter = '*=>[KNN '.$topK.' @embedding $vec as score]';
// $filter = ["vec" => json_encode($vector)];
$arguments = new SearchArguments();
$arguments->withScores();
$arguments->withPayloads();
$arguments->filter($filter);
$vector = pack('f*', ...$vector);
$result = $this->r->ftSearch($this->indexName, $arguments, ['vec' => $vector]);
return $result;
}
当执行时,我得到以下错误Call to a member function toArray() on array
在这一行中:vendor\predis\predis\src\Command\Redis\Search\FTT.php:34
我在函数中添加了一个日志来查看数据是如何到达的,但我不明白发生了什么:/我认为它必须是一个字符串数组,而不是传递不同的数组,但我不确定。
public function setArguments(array $arguments)
{
[$index, $query] = $arguments;
Log::info($arguments);
$commandArguments = (!empty($arguments[2])) ? $arguments[2]->toArray() : [];
parent::setArguments(array_merge(
[$index, $query],
$commandArguments
));
}
和部分日志
[2023-08-25 04:58:14] local.INFO: array (
0 => 'conversations',
1 =>
Predis\Command\Argument\Search\SearchArguments::__set_state(array(
'sortingEnum' =>
array (
'asc' => 'ASC',
'desc' => 'DESC',
),
'arguments' =>
array (
0 => 'WITHSCORES',
1 => 'WITHPAYLOADS',
2 => 'FILTER',
3 => '*=>[KNN 2 @embedding $vec as score]',
),
)),
2 =>
array (
'vec' => '$���E�;ǻ���h���켩ǫ<�vX;��`����寍...
),
)
1条答案
按热度按时间eivgtgni1#
我找到解决办法了!!!