solr 中基于向量的搜索

Aks*_*Aks 6 solr information-retrieval vector

我正在尝试在 solr 中实现基于密集向量的搜索(当前使用版本 8.5.2)。我的要求是

  1. 将 solr 中每个文档的密集向量表示存储在名为 vectorForm 的字段中。
  2. 现在,当用户发出某些查询时,我也会将该查询转换为某种密集向量表示,现在我想从 solr 获取查询向量表示和 vectorForm 字段之间具有最高 dotProduct 值的前 100 个文档(为上面的每个文档存储) )在solr中。

我对此有几个问题是

  1. 应使用什么字段类型来定义 vectorForm 字段(具有多值整数的 docValues 在这里效果最好)?
  2. 如何有效地进行上述基于向量的检索?(请记住,延迟应尽可能低)

我读到 solr 有 dotProduct 和 cosinSimilarity 函数,但无法理解在我的情况下如何使用它,如果这就是解决方案,那么任何指向示例实现的链接都会有所帮助。

任何帮助或指导都会对我有巨大的帮助。

小智 5

神经搜索已随 Apache Solr 9.0 一起发布。

DenseVectorField提供了索引和搜索浮点元素的密集向量的可能性,定义了参数,例如要传入的密集向量的维度、要使用的相似度函数、要使用的 knn 算法等......

目前,仍然需要在外部生成向量,然后将获得的嵌入推入Solr中。

在查询时,您可以使用 k-近邻 ( knn ) 查询解析器,该解析器允许根据给定字段中的索引密集向量查找查询向量的 k-最近文档。

这是我们的端到端矢量搜索教程,绝对可以帮助您了解如何利用这个新的 Solr 功能来改善用户搜索体验 https://sease.io/2023/01/apache-solr-neural-search-教程.html


小智 0

从 Solr 9.0 开始,您可以使用“密集向量搜索”。

https://solr.apache.org/guide/solr/9_0/query-guide/dense-vector-search.html