2010-07-09 56 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語句,似乎這樣的伎倆