1

我正在为 zope 网站建立一个非常彻底的搜索机制。有很多不同的搜索方式,因为它可能想要在同一个索引上搜索多个值(并匹配所有这些值),所以我需要使用 AdvanceQuery 来完成。我已经建立了这样的查询:

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

请记住,这可能不是要搜索的变量的完整列表,因此可以查看数百种可能的组合。如何有条件地定义“查询”以使其不会中断?

4

1 回答 1

0

正如我在评论中所说,在 if 语句中使用 &= 似乎可以解决问题

于 2010-07-09T13:34:46.863 回答