Plone 如何查找字段的索引(如果有)

Plone 如何查找字段的索引(如果有),plone,Plone,我在portal_目录中有一些针对各种类型的索引 给定门户类型和字段名,如何查找该字段的索引名(如果有) 一些有关zcatalog文档的相关指针也可能对我有所帮助 谢谢..您只需为要用于索引值的方法或属性名称添加一个索引,这没有什么太棘手的,而且可能都可以通过TTW来完成 如果您需要更多的逻辑来获取索引,请查看这个stackoverflow问题:没有简单的一对一方法来确定这一点。在Plone 4中,目录中的索引基本上有三种不同的方式可以从内容类型获取信息 索引配置 首先也是最重要的是,可以选择使

我在portal_目录中有一些针对各种类型的索引

给定门户类型和字段名,如何查找该字段的索引名(如果有)

一些有关zcatalog文档的相关指针也可能对我有所帮助


谢谢..

您只需为要用于索引值的方法或属性名称添加一个索引,这没有什么太棘手的,而且可能都可以通过TTW来完成


如果您需要更多的逻辑来获取索引,请查看这个stackoverflow问题:

没有简单的一对一方法来确定这一点。在Plone 4中,目录中的索引基本上有三种不同的方式可以从内容类型获取信息

索引配置 首先也是最重要的是,可以选择使用要在给定对象上建立索引的属性或方法的名称来配置索引。索引通常有一个
getIndexSourceNames
方法,它将告诉您它们将索引哪些项

通常这与索引id相同,但这不是给定的。通常,如果在
getIndexSourceNames
的结果中列出了字段访问器,则该索引将为给定类型的字段编制索引:

从Products.CMFCore.utils导入getToolByName
catalog=getToolByName(上下文“门户\目录”)
对于catalog.index_objects()中的索引:
如果index.getIndexSourceNames()中的field.accessor:
打印“索引%s索引%s%”(Index.getId(),field.getName()”
在上面的示例中,我假设您已经在变量
字段
中保留了字段对象,并且在变量
上下文中保留了类型的实际实例

自定义索引适配器 为对象编制索引时,目录还会围绕该对象构造一个包装器,并查找对象的索引适配器。这些适配器都是为索引名称注册的(因此,
getIndexSourceNames
中列出的名称)和接口或类。如果您的内容类实现了该接口,或者直接为其类或基类注册了索引适配器,则可以使用索引适配器

索引适配器是任意代码片段,因此可以调用内容对象上的任何字段来生成结果。您无法通过编程方式确定是否将使用内容类型上的给定字段,或者是否将使用任何字段

列出了几个索引适配器的示例,这些适配器都是为
接口注册的,表示所有对象:

  • 收集有关对象的安全信息

  • 确定当前对象在其容器中的位置。因此,此索引器不需要来自对象本身的任何信息来确定其值

  • 获取内容的
    标题
    值,并生成一个适合对目录搜索结果进行排序的值。该值将标准化该值,并将其小写,并在数字前面加上前导零,以便于对编号标题进行排序

直接方法存取 字段基本上是在内容对象上生成的方法。但是,内容类也可以在其类上实现方法。与自定义索引适配器相同的注释适用于此处;这些是任意Python代码,因此它们可以使用内容类型字段,在将信息传递到索引之前聚合并处理信息

Archetypes
BaseObject
类(用于所有Archetypes内容类型)定义了示例。此方法将
searchable
属性设置为True的所有可用字段,尝试以纯文本形式获取每个字段值,并聚合
SearchableText
索引的结果

结论 您只能在索引内容与字段相关时对其进行有根据的猜测。通过自省索引配置,您将看不到是否有自定义索引器适配器屏蔽您的字段(注册
getField
索引适配器,它将被使用,而不是直接调用
getField
)。自定义索引器和类方法仍然可以访问字段并将信息传递到目录索引