Python BadFilterError:筛选器无效:每个查询只能有一个属性具有不等筛选器(<;=,>;=,<;,>;)
我试图在两个不同的属性上应用过滤器,但它不允许我这样做。那么解决方案是什么,代码是snipt:Python BadFilterError:筛选器无效:每个查询只能有一个属性具有不等筛选器(<;=,>;=,<;,>;),python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,我试图在两个不同的属性上应用过滤器,但它不允许我这样做。那么解决方案是什么,代码是snipt: if searchParentX : que.filter("parentX >=", searchParentX).filter("parentX <=", unicode(searchParentX) + u"\ufffd") que.order('parentX') if searchParentY : que.filter("parentY >
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")
如果searchParentX:
que.filter(“parentX>=”,searchParentX).filter(“parentX=”,searchParentY).filter(“parentY不平等过滤器”最多只限于一个属性,我认为这一限制是因为bigtable中的数据以词法排序的形式存储,因此一次只能执行一个搜索
解决方案是进行内存过滤:
您可以运行两个查询(每个查询对一个属性进行过滤)并对结果进行交集(根据数据的大小,您可能需要限制一个查询的结果,但不限制另一个查询的结果,以便将其放入内存中)
运行一个查询并过滤掉内存中的另一个属性(在这种情况下,如果您知道哪个属性将返回更过滤的列表,这将是有益的)
或者,如果数据的结构可以将数据分成多个集合,则可以对该集合执行相等筛选,并在内存中完成筛选。例如,如果正在搜索字符串,但知道字符串的长度是固定的(例如6个字符),则可以创建“查找”字段中包含行乞的3/4个字符。然后,当您需要搜索此字段时,可以通过匹配前几个字符来完成搜索,并在内存中完成搜索。另一个示例:在搜索整数范围时,如果您可以定义范围的通用分组(例如,一年几十个字符或价格范围),则可以定义“范围”要在其上执行相等搜索并在内存中继续筛选的字段