search by ids #42512
Answered
by
yhmo
ztyf-lq
asked this question in
Q&A and General discussion
search by ids
#42512
-
场景我的搜索分为两步,第一步使用全文检索融合其他步骤进行初筛。第二步在初筛的范围下进行向量搜索。 问题描述基于我的场景,我想知道milvus是否支持在我给定id范围下搜索,我的id范围并不是固定的,因为每次初筛结果可能不同。我的第一个想法是使用filter表达式中in关键字,但是我感觉使用filter表达式可能会遇到的问题为:当我初筛的结果成百上千,甚至上万个的时候,这样会造成filter表达式过长,不知milvus对于filter表达式是否存在长度限制。我的期望是milvus存在一个提供搜索id范围的search函数,不知道milvus是否存在这样的接口? |
Beta Was this translation helpful? Give feedback.
Answered by
yhmo
Jun 4, 2025
Replies: 1 comment 3 replies
-
IN 和 返回过滤是两种不同的用法: IN:
Range:
你是想在过滤表达式里既有in又有范围? |
Beta Was this translation helpful? Give feedback.
3 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
“id in [1,10,24,100...]”这样的文本表达式的长度进本就是rpc调用时允许的请求大小,受milvus.yaml中的这个配置限制,默认64MB:
可以把这个配置改大,但最终会受限于protobuf的限制,最大2GB。
几百几千个id一般也就MB级别的长度,所以离这个上限还很远。
越长的表达式解析时耗时越长,对查询延时有影响。几百个影响也不大,几千个也许稍慢点,以实测为准。
在milvus 2.5版本里支持了以id array的形式传给server,称为expression template:https://milvus.io/docs/filtering-templating.md ,就是你说的类似功能。
java sdk的用例如下:
https://github.com/milvus-io/milvus-sdk-java/blob/90b594a80c7e4cea792f7c252fb1642c76257469/examples/src/main/java/io/milvus/v2/SimpleExample.java#L108