2010-07-09 51 views
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 

请记住这可能不是变量的完整列表,使用这样在那里看着上百个可能的组合进行搜索。我怎样才能有条件地定义'查询',以便它不会中断?

+0

显然,一个措辞不当的问题 - 但是,我已经想通了,我用了IFS内&=添加它对查询已经启动 – chrism 2010-07-09 13:34:20

回答

0

正如我在评论说,使用& =中的if语句,似乎这样的伎俩