0

Lucene 最近基于这个原始分支为 Lucene 9.0.0 添加了 HNSW 近似最近邻搜索 (ANN):https ://issues.apache.org/jira/browse/LUCENE-9004 。

Lucene 是否支持预过滤?例如,假设我们要对 2020 年之后创建的文档进行矢量搜索。是否可以在相同的矢量搜索请求中过滤这些文档?还是我们必须在取回 ANN 搜索结果后进行后过滤?

我注意到这里的方法下有一个成员 acceptOrds queryhttps ://javadoc.io/doc/org.apache.lucene/lucene-core/latest/org/apache/lucene/util/hnsw/HnswGraph.html 。可以用来过滤吗?

4

1 回答 1

0

据我所知,他们没有,我想它正在筹备中,但我想这需要时间。您应该研究一下 Pinecone,从我所看到的 Pinecone 的元数据过滤确实领先。

这样做的原因是预过滤限制了您的搜索范围,这会过滤掉 HNSW 图中的节点,因此您不再能够使用该图执行 ANN 搜索,它已从过滤器中“损坏”。所以搜索恢复到精确的 kNN 搜索——例如它很

后过滤可以很快,因为您能够维护图形结构并执行 ANN 搜索,但随后您将过滤结果。因此,如果您说我想要前 5 个最相似的结果,您可以得到 4、2 或在最坏情况下为 0 的结果。

Pinecone 引入了一种称为“单级过滤”的东西,它可以像预过滤一样保持准确性,并返回您请求的确切匹配数量,同时(通常)提供像后过滤一样的速度提升。所以你得到了两全其美。

于 2022-02-04T06:29:14.487 回答