如何重新索引某种类型的所有内容?

时间:2015-03-02 12:09:25

标签: plone

我想重新索引特定类型的所有内容,只需一次。

我应该在zmi中创建一个python脚本吗?

这是我到目前为止所拥有的

from zope.component.hooks import getSite

site = getSite()
items = site.contentItems()
items.reindexObject()

我不确定如何指定类型......或者我是否在正确的轨道上。有没有我可以解剖的这种操作的例子?

2 个答案:

答案 0 :(得分:4)

最好的方法是使用目录:

import plone.api

catalog = plone.api.portal.get_tool(name='portal_catalog')
for brain in catalog(portal_type='My portal type'):
    obj = brain.getObject()
    obj.reindexObject()

那就可以了。

请注意,我只使用了plone.api调用,因此您的代码将来会证明。

答案 1 :(得分:3)

我们使用的解决方案:

import plone.api

catalog = plone.api.portal.get_tool(name='portal_catalog')
for brain in catalog(portal_type='My portal type'):
    obj = brain.getObject()
    catalog.catalog_object(obj)

使用ZCatalog中的catalog_object方法与ZMI"更新"使用的API相同。特征:

ZMI Catalog update

优点:修改日期未更新,您只需重新编制目录数据索引 缺点:您无法在受限制的Python中使用此API(您可以调用obj.reindexObject

如果您对修改日期更改没有疑问,则gforcata答案会更简单。