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