Lucene最近为Lucene 9.0.0添加了HNSW近似最近邻搜索(ANN),基于以下原始分支:https://issues.apache.org/jira/browse/LUCENE-9004。
Lucene支持预过滤吗?例如,假设我们要对2020年以后创建的文档进行矢量搜索,是否可以在同一个矢量搜索请求中过滤这些文档?或者我们必须在返回ANN搜索结果后进行后过滤?
我注意到在query
方法下面有一个acceptOrds成员:https://javadoc.io/doc/org.apache.lucene/lucene-core/latest/org/apache/lucene/util/hnsw/HnswGraph.html。是否可用于过滤?
1条答案
按热度按时间2ledvvac1#
据我所知,他们还没有,我想这是在管道,但我认为这将需要时间。你应该看看Pinecone,从我所看到的Pinecone的元数据过滤真的很领先。
这样做的原因是预过滤限制了搜索范围,过滤掉了HNSW图中的节点,因此您无法再对该图执行ANN搜索,因为它与过滤器“断开”。因此搜索将恢复为精确的kNN搜索-例如,它 * 慢 *。
后过滤可以很快,因为你可以保持图形结构并执行ANN搜索,但你是在过滤结果。所以,如果你说我想要前5个最相似的结果,你可能会得到4个,2个,或者在最坏的情况下0个结果。
Pinecone引入了一种叫做“单级过滤”的技术,它可以像预过滤一样保持准确性,并返回你所要求的准确匹配数,同时(通常)像后过滤一样提高速度。所以你可以两全其美。