无效过滤器错误:仅允许每个查询中的一个属性使用不等式过滤器(<=,>=,<,>)

2024-10-02 20:32:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在两个不同的属性上应用过滤器,但是它不允许我这样做,那么解决方案是什么,这里是代码片段:

if searchParentX :
    que.filter("parentX >=", searchParentX).filter("parentX <=", unicode(searchParentX) + u"\ufffd") 
    que.order('parentX')   

if searchParentY :
    que.filter("parentY >=", searchParentY).filter("parentY <=", unicode(searchParentY) + u"\ufffd") 

Tags: 代码过滤器if属性unicodeorder解决方案filter
2条回答

不等式过滤器最多只能有一个属性,我认为这个限制是因为bigtable中的数据是以词法排序的形式存储的,所以一次只能执行一次搜索

https://developers.google.com/appengine/docs/python/datastore/queries#Restrictions_on_Queries

解决方案是进行内存筛选:

  1. 您可以运行两个查询(每个查询对一个属性进行过滤)并对结果进行交集(根据数据的大小,您可能需要限制一个查询的结果,但不能限制另一个查询的结果,以便它能够放入内存)
  2. 运行一个查询并过滤掉内存中的另一个属性(在这种情况下,如果您知道哪个属性将返回一个更过滤的列表,这将是有益的)

或者,如果数据的结构可以将数据分解为多个集合,则可以对该集合执行相等筛选器并在内存中完成筛选。例如,如果您正在搜索字符串,但您知道字符串是固定长度(比如6个字符),则可以创建一个包含3/4个字符的“查找”字段。然后,当您需要在这个字段上搜索时,可以通过匹配前几个字符来完成,并在内存中完成搜索。另一个例子:在搜索整数范围时,如果您可以定义通用的范围分组(比如一年几十年,或者价格范围),那么您可以定义一个“范围”字段来执行相等搜索并在内存中继续过滤

相关问题 更多 >