没有包含类型的索引特定类型

时间:2012-06-28 13:31:44

标签: plone archetypes

我根据Plone.org instructions为我的内容类型添加了FieldIndex。

在ZMI中,我可以看到/mysite/portal_catalog/Indexes/Building处的索引项目。我的内容类型(提供IMyType,一个字段building)是一个文件夹,包含IPhoto中的allowed_content_types照片(提供building,不含profiles/default/types/MyType.xml字段)文件。

我只想为MyType的建筑字段编制索引。但是,似乎Photo类型的项目使用其父项的值进行索引。那很烦人。代码@indexer(IMyType)是否意味着为IMyType及其包含的类型建立索引?我怎样才能仅为IMyType索引?

2 个答案:

答案 0 :(得分:2)

索引器的作用是直接从被索引的对象获取属性。在作为特殊包装器的Plone中,如果它们存在,将使用已注册的索引器(使用@indexer装饰器创建)。

但是,如果索引发生在索引building上并且它也是IMyType对象上的属性,那么任何包含的对象也将通过获取具有该属性。注册IMyType的索引器并不能阻止这种情况。

有几种解决方法:

  1. 为索引器使用不同的名称,该名称与属性名称不匹配。请注意,如果您所做的只是索引属性索引器是多余的,索引也可以直接检索属性。

  2. 注册“全部捕获”索引器:

    from zope.interface import Interface
    @indexer(Interface)
    def catchall_ignore(ob, **kw):
        # Raising AttributeError means: do not index anything
        raise AttributeError
    

    现在将使用此索引器方法代替直接属性访问,而不是为building注册索引器。

答案 1 :(得分:1)

这就是收购的方式。

此处如何解决此问题:

http://plone.293351.n2.nabble.com/how-to-prevent-portal-catalog-from-indexing-acquisition-values-td2650735.html

“使用执行aq_explicit检查的自定义索引器。”