1
我正在为zope站点构建一个非常彻底的搜索机制。有很多不同的搜索方式,并且因为它可能想要在同一个索引上搜索多个值(并匹配所有这些值),所以我需要使用AdvanceQuery来完成。我已经建立了我的疑问是这样的:有条件地在zope中的高级查询中包含查询
if self.text():
text_query = And()
for t in self.text():
text_query.addSubquery(Eq('SearchableText',t))
if self.sector()
sector_query = And()
for s in self.sector()
sector_query.addSubquery(Eq('sector',s))
if self.region():
region_query = Eq('region',self.region())
if self.role():
role_query = Eq('role',self.role())
self.text()等在其他地方定义,将返回False如果查询不存在的,self.text()和self.sector()即使只有一个值,也总是生成一个列表,所以不用担心。
我也知道如何做最后一点例如
return self.context.portal_catalog.evalAdvancedQuery(query)
我无法弄清楚的是如何缝合它来定义'查询'。如果我做这样的事情它打破即使不是所有的人都存在:
query = text_query & sector_query & region_query & role_query
请记住这可能不是变量的完整列表,使用这样在那里看着上百个可能的组合进行搜索。我怎样才能有条件地定义'查询',以便它不会中断?
显然,一个措辞不当的问题 - 但是,我已经想通了,我用了IFS内&=添加它对查询已经启动 – chrism 2010-07-09 13:34:20