solr中基于向量的搜索



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

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

关于这个我有几个问题是

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

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

任何帮助或指导都将对我有很大的帮助。

Neural Search已随Apache Solr 9.0发布。

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

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

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

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

你可以使用"密集向量搜索";从Solr 9.0开始。

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

最新更新