Lucene最近在原有分支https://issues.apache.org/jira/browse/LUCENE-9004的基础上,为Lucene 9.0.0添加了HNSW近似最近邻搜索(ANN)。
Lucene支持预过滤吗?例如,假设我们希望对2020年之后创建的文档进行矢量搜索。是否可以在向量搜索的相同请求中筛选这些文档?或者我们必须在返回人工神经网络搜索结果后进行后过滤?
我注意到在query方法下有一个成员query:https://javadoc.io/doc/org.apache.lucene/lucene-core/latest/org/apache/lucene/util/hnsw/HnswGraph.html。那能用来过滤吗?
发布于 2022-02-04 06:29:14
据我所知,他们没有,我想这是在酝酿中,但我认为这将需要时间。您应该看看Pinecone,从我已经看到的情况来看,Pinecone的元数据过滤是非常先进的。
原因是由于预过滤,你的搜索范围受到限制,它过滤掉了HNSW图中的节点,因此你不再能够用这个图执行ANN搜索,它从过滤器中被“破坏”了。因此,搜索会恢复到精确的kNN搜索--比如搜索速度很慢。
后过滤可以是快速的,因为你能够维护图的结构和执行一个人工神经网络搜索,但然后你过滤的结果。所以,如果你说我想要前5名最相似的结果,你可以得到4,2,或者在最坏的情况下0的结果。
松果公司推出了一种名为“单级滤波”的方法,它能够保持准确性,比如预先过滤,并返回您所要求的匹配的确切数量,同时(通常)提供速度增长,就像后续过滤一样。所以你在这两个世界中都占了上风。
https://stackoverflow.com/questions/70978062
复制相似问题