Plone 索引特定类型,不包含其包含的类型

Plone 索引特定类型,不包含其包含的类型,plone,archetypes,Plone,Archetypes,我为我的内容类型添加了一个字段索引 在ZMI中,我可以在/mysite/portal\u catalog/Indexes/Building中看到索引项。我的内容类型(提供IMyType,有一个字段building)是folderish,包含一张照片(提供IPhoto,没有building字段),作为profiles/default/types/MyType.xml文件中允许的内容类型 我只想为MyType的building字段建立索引。然而,照片类型的项目似乎用其父项的值进行索引。真烦人。代码@

我为我的内容类型添加了一个字段索引

在ZMI中,我可以在
/mysite/portal\u catalog/Indexes/Building
中看到索引项。我的内容类型(提供
IMyType
,有一个字段
building
)是folderish,包含一张照片(提供
IPhoto
,没有
building
字段),作为
profiles/default/types/MyType.xml
文件中允许的内容类型


我只想为MyType的building字段建立索引。然而,照片类型的项目似乎用其父项的值进行索引。真烦人。代码
@indexer(IMyType)
是否表示对IMyType及其包含的类型进行索引?如何仅为IMyType编制索引?

这就是采集的工作方式

下面介绍如何解决此问题:


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

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

但是,如果您恰好索引了
建筑
,并且这也是
IMyType
对象上的一个属性,则任何包含的对象也将通过获取具有该属性。为
IMyType
注册索引器不会阻止此操作

有几种方法可以解决这个问题:

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

  • 注册“全面”索引器:

    现在,此索引器方法将取代直接属性访问,而用于照片,从而导致索引器不为
    构建
    注册值

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