Weaviate是否支持基于两个属性比较的运算符过滤对象?
Weaviate Python v4 客户端属性间比较过滤支持情况
Weaviate Python v4 客户端目前不支持直接通过逻辑运算符比较同一对象的两个属性。当前的Filter API仅支持属性与字面量值的比较操作,无法像你示例中那样引用同一对象的另一个属性作为比较基准。
如果需要实现“筛选同一对象中两个属性不匹配”的需求,可以采用以下替代方案:
- 客户端本地过滤:先查询出目标集合的所有对象,再在本地通过Python代码筛选符合条件的结果,示例如下:
# 获取集合内所有对象 all_objects = some_collection.query.fetch_objects().objects # 本地过滤出property_1与property_2不相等的对象 mismatches = [obj for obj in all_objects if obj.properties["property_1"] != obj.properties["property_2"]]
- 预处理标记属性:如果是批量数据场景,可以在导入数据前新增一个标记属性(比如
properties_mismatch),提前计算并存储两个属性是否不匹配的结果,之后就可以直接通过这个标记属性进行过滤,示例如下:
# 导入数据时新增标记属性 data_object = { "property_1": "value1", "property_2": "value2", "properties_mismatch": "value1" != "value2" } some_collection.data.insert(data_object) # 后续过滤直接使用标记属性 mismatches_filter = Filter.by_property("properties_mismatch").equal(True) mismatches = some_collection.query.fetch_objects(filters=mismatches_filter).objects
内容的提问来源于stack exchange,提问作者Eric Schoen
相关产品推荐
相关产品推荐

